2017-04-10 59 views
0

我有一個表,看起來像這樣:SQL連接那裏的條件

[Jobs] 
+-----+-------+---------+ 
+ ID + Title + Active + 
+-----+-------+---------+ 
+ 1 + Admin +  0 + 
+-----+-------+---------+ 
+ 2 + Mgr +  1 + 
+-----+-------+---------+ 
+ 3 + Emp +  0 + 
+-----+-------+---------+ 

[JobsTxt] 
+-------+-------+---------+ 
+ JobID + Text + Type + 
+-------+-------+---------+ 
+ 1  + test + 1  + 
+-------+-------+---------+ 
+ 1  + test2 + 1  + 
+-------+-------+---------+ 
+ 1  + test3 + 2  + 
+-------+-------+---------+ 
+ 3  + test + 1  + 
+-------+-------+---------+ 

我想編寫一個查詢,讓我從具有JobsTxt表中的文本條目類型= 1和Active = 0在作業表,其中JobsTxt.JobID = Jobs.ID

所以它會是這樣的:

Select [JobsTxt].Text from [JobsText] left join [Jobs] on [JobsTxt].JobId = [Jobs].ID where [JobsTxt].Type = 1 and [Jobs].Active = 0 

我很新的連接和這樣的查詢,所以任何幫助表示讚賞!

+2

你得到什麼錯誤? –

+0

最佳做法是從作業和左或內部加入JobsTxt中選擇 – Rocky

+0

查詢看起來很好..如果必須檢查「Active」標誌,我會將'left join [Jobs]'更改爲'inner join [Jobs]'每一行..只爲了可讀性 – JamieD77

回答

0

如果您不需要JOIN,EXISTS很好,這意味着您只需要其中一個表的字段。

SELECT jt.Text 
FROM [JobsText] jt 
WHERE jt.Type = 1 
     AND EXISTS 
    (
     SELECT 1 
     FROM [Jobs] j 
     WHERE j.ID = jt.JobID 
       AND j.Active = 0 
    ); 
+0

太好了,我相信這是我所需要的。我以爲我應該使用加入,但EXISTS是我需要的。我沒有意識到這一點,謝謝! – Cineno28

0

請原諒,我不能直接對你的問題發表評論。所以,讓我把它放在這裏,儘管我認爲這可能不符合答案。

對我來說,你的SQL語句看起來非常好,應該提供你描述的內容。也許你可以幫助我們,並提供一些有關SQL方言的信息(例如,你正在運行什麼數據庫系統以及哪個版本)?

編輯: 看來你確實有一個錯字:

[...] from [JobsText] [...] 
       ↑ - should there be an 'e'? 

謝謝。

0

請使用以下查詢:

DECLARE @Jobs TABLE (ID INT, Title VARCHAR(10), Active BIT) 
    INSERT INTO @Jobs VALUES 
    (1,'Admin',0), 
    (2,'Mgr',1), 
    (3,'Emp',0) 


    DECLARE @Jobtxt TABLE (JobID INT, [Text] VARCHAR(10), [Type] INT) 
    INSERT INTO @Jobtxt VALUES 
    (1,'test',1), 
    (1,'test2',1), 
    (1,'test3',2), 
    (3,'test',1) 


    SELECT 
     Jt.JobID,Jt.[Text] 
    FROM 
     @Jobtxt Jt INNER JOIN @Jobs J ON Jt.JobID = J.ID 
    WHERE 
     J.Active = 0 AND Jt.[Type] =1