2012-07-05 49 views
0

我將我的應用程序從Django移植到ASP.NET Webforms(違揹我的意願,但我們可以怎樣處理公司世界..),並且我習慣了Django生成所有我的SQL查詢現在我需要幫助。 我有3個表:procesomarcadormarcador_progreso結合來自兩個SQL查詢的數據

每個proceso有很多marcador_progreso,這又是外鍵表marcador

所以基本表的樣子:

proceso 
    id 

marcador 
    id 
    text 

marcador_progreso 
    id 
    marcador_id 
    proceso_id 
    state 

對於所有marcador_progreso,其中其proceso_id是(在URL從QUERYFIELD)當前proceso,我需要列出其state和它的各個marcador.text。 我一直在使用EntityFramework,但這就像一個雙重查詢,所以我不知道該怎麼做。

我想這是結合了以下兩條語句,但我不知道該怎麼做。

SELECT [state] FROM [marcador_progreso] 
SELECT [text] FROM [marcador] WHERE ([id] = marcador_id) 

回答

0

您需要了解JOIN才能在FROM條款中調用多個表格。 JOIN通過使用每個數據庫通用的值,將來自數據庫中兩個或多個表的記錄結合起來。有不同的類型 - 下面的SQL示例是一個INNER連接,它只獲取兩個表在公共值上匹配的記錄。即使在RIGHT(marcador_progreso)表中沒有任何匹配的記錄,您可能也會考慮LEFT聯合會獲得LEFT表(在本例中爲marcador)的任何記錄。 在Management Studio中彈出以下內容,使用不同的連接進行播放。將INNER替換爲LEFT,不帶WHERE運行它。 閱讀關於`JOIN's。

一般情況下,爲您的新編寫自己查詢的企業,他們都開始用相同的基本結構: SELECT(UPDATE,無論DML語句等)(列)要顯示(更新什麼,等)
FROM(表)其中這些記錄生活 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 
1

你想要做一個JOIN:

SELECT mp.state, m.text 
FROM marcador_progreso as mp 
INNER JOIN marcador as m 
ON mp.marcador_id = m.id 

這是一個excellent post是越過各種連接類型。

+0

1,但我翻譯使用LEFT OUTER JOIN兩個獨立選擇,但是根據OP的意圖,它可以採取任何方式 – 2012-07-05 15:17:20