组合来自两个SQL查询的数据

时间:2012-07-05 15:07:59

标签: asp.net sql sql-server webforms

我将我的应用程序从Django移植到ASP.NET Webforms(违背我的意愿,但我们可以对企业世界做些什么......),我习惯于Django生成所有SQL查询,所以现在我需要救命。 我有3个表:procesomarcadormarcador_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}}

2 个答案:

答案 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