我将我的应用程序从Django移植到ASP.NET Webforms(违背我的意愿,但我们可以对企业世界做些什么......),我习惯于Django生成所有SQL查询,所以现在我需要救命。
我有3个表:proceso
,marcador
,marcador_progreso
每个proceso
都有许多marcador_progreso
,而marcador
又是proceso
id
marcador
id
text
marcador_progreso
id
marcador_id
proceso_id
state
的外键表。
基本上表格如下:
marcador_progreso
对于其proceso_id
是当前处理(来自URL中的QueryField)的所有state
,我需要列出其marcador.text
及其各自的SELECT [state] FROM [marcador_progreso]
SELECT [text] FROM [marcador] WHERE ([id] = marcador_id)
。
我一直在使用EntityFramework,但这就像是一个双重查询,所以我不知道该怎么做。
我想这是结合了以下两个陈述的东西,但我不知道该怎么做。
{{1}}
答案 0 :(得分:1)
你想要加入:
SELECT mp.state, m.text
FROM marcador_progreso as mp
INNER JOIN marcador as m
ON mp.marcador_id = m.id
这是excellent post,它涵盖了各种联接类型。
答案 1 :(得分:0)
您需要了解JOIN
来调用FROM
子句中的多个表。 JOIN
通过使用每个表的公共值来组合数据库中两个或多个表的记录。有不同的类型 - 下面的SQL示例是INNER
连接,它只获取两个表都与公共值匹配的记录。你可能想要考虑一个LEFT
连接,即使LEFT
中没有任何匹配的记录,也会得到RIGHT
表(在本例中为marcador)的任何记录。 marcador_progreso)表。
在Management Studio中弹出以下内容,使用不同的联接进行播放。将INNER
替换为LEFT
,在没有WHERE
的情况下运行它。
阅读`JOIN'。
一般而言,对于您编写自己的查询的新尝试,它们都以相同的基本结构开头:
SELECT(UPDATE,WHATE DML语句等)(COLUMNS)您想要显示的内容(更新等)
这些记录存在的 FROM(TABLE)
WHERE(FILTER / LIMIT)数据必须满足的条件
快乐的取材!
SQL:
DECLARE @ProcessoId int
SET @ProcessoId = --1
SELECT m.[STATE],mp.[TEXT]
FROM marcador M
INNER JOIN marcador_progreso MP ON MP.marcador_id = m.id
WHERE proceso_id = @ProcessoId
EF INNER示例
var marc = from m in yourcontext.marcador
join mp in yourcontext.marcador_progreso on m.id equals mp.marcador_id
where proceso_id == processoIdvariable
EF LEFT示例
var marc = from m in yourcontext.marcador
join mp in yourcontext.marcador_progreso on m.id equals mp.marcador_id into details
from d in details.DefaultIfEmpty()
where proceso_id == processoIdvariable