2014-05-05 44 views
1

因此,我不確定我的標題是否正確或具有誤導性。這聽起來很簡單,但我無法弄清楚,並沒有找到一個好例子。根據另一列中的值選擇不同的記錄,其中一個ID存在多行

我想從ID不匹配某個代碼的表中選擇不同的ID。例如我有如下表A:

TABLEA

ID   Code 
====  ==== 
1   AAA 
1   BBB 
1   CCC 
2   AAA 
2   DDD 
2   EEE 
3   BBB 
3   GGG 
3   HHH 

我想返回的唯一的結果是ID 3,因爲ID 1和ID 2匹配到代碼 'AAA'。

我已經試過:

SELECT disctinct(ID) from tableA where code <> 'AAA' 

但這返回ID 1,2和3。我不知道如果按組將工作要麼是因爲我甚至不想ID 1和2被退回。

+0

您不必使用HTML格式化代碼。使用代碼示例選項(帶有工具欄中的「{」或「ctrl + k」)的圖標會將其視爲代碼片段,並且還會將其突出顯示。 – Nivas

回答

3

嘗試使用NOT IN

SELECT ID 
FROM TableA 
WHERE ID NOT IN(SELECT ID 
      FROM TableA 
      WHERE CODE='AAA') 

IN確定一個指定的值是否在子查詢或列表中的任何值匹配。閱讀更多here

說明:

內查詢選擇所有的ID,其作爲CODE=AAA。外部查詢將通過內部查詢選擇不在結果返回中的所有ID。

即,對於給定的數據,內部查詢將返回(1,2)。外部查詢將選擇ID這是不是在(1,2),這是ofcourse 3

2

這將返回所有的行爲給定ID:

select * 
from tab as t1 
where not exists 
    (select * from tab as t2 
    where t1.id = t2.id 
    and code = 'AAA') 

而這只是沒有「AAA」的ID:

select id 
from tab 
group by id 
having count(case when code = 'AAA' then 1 end) = 0 
相關問題