2016-09-28 59 views
0

我在SQL中有2個表。查詢表2中找到缺失值的2個表的查詢

- 表1-

  • 名稱
  • ID

- 表2-

  • ID

  • 方案

表1只爲每家公司保存一條記錄。在表2中,表1中的記錄可以有多個條目。因此,我可以將兩個表一起加入ID = ID,並獲得0到7個結果中的任意位置。我需要查詢2表,我正在尋找表1中任何不在特定程序中的公司,但他們可以在其他程序中。我知道這很容易做到,但我無法讓它爲我工作。

+1

能否請你少用抽象的名字,並分享一些樣本數據與預期的結果爲你的表?我無法遵循你想要做的事。 – Siyual

+0

我覺得在他的輸入中有具體的程序。\ – Naidu

+0

加入後做個where條件。在哪裏table2.program不等於程序,ID – Naidu

回答

0
SELECT t1.Name 
    FROM Table1 t1 
LEFT JOIN 
     Table2 t2 
    ON t1.id = t2.id 
WHERE t2.program IS NULL; 
+0

t2沒有名稱字段,它確實有程序。但是這會讓你的程序註冊公司的ID與公司表不符,這與被問到的是相反的。 – Matt

+0

現在,它將獲得沒有註冊到任何程序的公司,在您進行下一次編輯時,您可能只需要我的答案 – Matt

1
SELECT * 
FROM 
    Table1 t1 
    LEFT JOIN Table2 t2 
    ON t1.id = t2.id 
    AND t2.program = 'asdf' 
WHERE 
    t2.id IS NULL 

只需使用一個外連接的地方連接條件的程序要求,然後說其中對於表2的記錄不存在。

試圖讓這一點更加明確和適應您的具體企業和項目:

SELECT * 
FROm 
    Companies c 
    LEFT JOIN Programs p 
    ON c.Id = p.CompanyId 
    AND p.Program = 'some title' 
WHERE 
    p.Program IS NULL 

而且不存在方法:

SELECT * 
FROM 
    Companies c 
WHERE 
    NOT EXISTS (SELECT 1 
      FROM Programs p 
      WHERE 
       p.CompanyId = c.Id 
       AND p.Program = 'some title') 

我不要在方法顯示NOT因爲我通常不會推薦它。

+0

這一項適用於我正在尋找的內容。謝謝。 – Jayson

+0

@Jayson很高興爲您解決問題,並樂於提供幫助,請考慮接受我的答案或其他人的幫助,以便其他人知道您的問題已經得到了處理並且分配了名譽點。謝謝! http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Matt

0

您想讓公司找不到您在查詢中指定的程序嗎?這是我想出了:

select t1.* 
from Table1 t1 
left join Table2 t2 on t1.ID = t2.ID 
where coalesce(t2.Program, '') <> 'Name of Program' 

where coalesce(t2.Program, '') not in (<comma-delimited list of programs>)