2014-02-22 84 views
2

我試過尋找這個,我不太確定如何確切地說明我要做什麼,但是我會展示我得到的和我想要的是。此外,我的第一個問題在這裏,所以我很抱歉,如果我得到任何錯誤!當找到第二列值時,根據列值排除行

首先,我有這樣的鏈接表的外鍵:

|ID|Value| 
+--+-----+ 
|1 | 70| 
|1 | 130| 
|2 | 60| 

現在,我想告訴我的所有的ID在該表中,其中Value!=70。我試過了;

SELECT * FROM table WHERE Value != 70 

這消除了70值,現在將顯示行1:1302:60。但是我怎麼去排除匹配的列中的所有值。例如。如果我說不顯示任何ID與他們關聯的值70,我應該只得到ID爲2的行。我試過了;

SELECT DISTINCT * FROM table WHERE Value != 70 

SELECT * FROM table WHERE Value != 70 GROUP BY ID 

SELECT DISTINCT * FROM table WHERE Value != 70 GROUP BY ID 

但這些工作。就像我說過的,我不確定如何說出我以後的話,但任何幫助將不勝感激。

回答

3
Select * From table 
where id Not In 
     (Select distinct id 
     From table 
     Where value = 70) 

Select * From table t 
where Not exists 
     (Select * From table 
     where id = t.id 
      and value = 70) 
+0

代碼的第一部分效果很好。謝謝! –

0

您可以使用子查詢和NOT IN條件

SELECT tb.* FROM table tb 
WHERE tb.ID NOT IN 
(
    SELECT a.ID FROM table a where a.Value = 70 
) 
0

我不知道如果我理解得很好,但也許這?

SELECT * FROM table WHERE ID NOT IN (
    SELECT ID FROM table WHERE Value = 70 
) 

我使用 'NOT IN',而不是!=因爲它可能是不止一個ID關聯值的70

你也coud使用:

SELECT * FROM table t1 WHERE NOT EXISTS(
    SELECT 1 FROM table t2 WHERE t2.ID = t1.ID AND t2.value = 70 
) 
0

你的第二次嘗試非常接近解決這個問題的方法之一。所述where子句僅僅需要改變到having條款(連同小變化到邏輯):

SELECT ID 
FROM table t 
GROUP BY ID 
HAVING sum(Value = 70) = 0; 

having子句中的表達進行計數的行數,其中value等於70。你不想要這樣的行,因此= 70。這種查詢形式非常靈活。使用having子句可以檢查更復雜的條件,如沒有7071

HAVING sum(Value = 70) = 0 AND 
     sum(Value = 71) = 0; 

或者沒有70但有71

HAVING sum(Value = 70) = 0 AND 
     sum(Value = 71) > 0; 

和更復雜的組合。