我試圖選擇id
其中代碼I
對應於它,但我只想要那些id
其中I
是唯一對應的值。正確的id
將是5
(3
和8
具有其他code
值以及I
)。使用Oracle SQL。SQL - 選擇語句與額外(唯一)在需求
id code
4 | G
4 | O
5 | I
3 | G
3 | I
8 | G
8 | I
8 | O
9 | G
我試圖選擇id
其中代碼I
對應於它,但我只想要那些id
其中I
是唯一對應的值。正確的id
將是5
(3
和8
具有其他code
值以及I
)。使用Oracle SQL。SQL - 選擇語句與額外(唯一)在需求
id code
4 | G
4 | O
5 | I
3 | G
3 | I
8 | G
8 | I
8 | O
9 | G
你可以用聚集做到這一點:
select id
from t
group by id
having min(code) = 'I' and max(code) = 'I';
如果code
可以NULL
,你需要另一個條件採取考慮到。
該解決方案通過將表格左連接到自身上,使其與ID匹配,但代碼不同,並找到連接失敗的記錄。 這將在最SQLS工作,它可能需要一些調整您的口味
SELECT DISTINCT T0.* FROM [Table] AS T0
LEFT JOIN [Table] AS T1 ON T0.ID = T1.ID AND T0.Code <> T1.Code
WHERE T1.ID IS NULL AND T0.ID = 'I'
@GordonLinoff方法很可能是最快的,但根據您的數據,還有其他替代方案具有不同的性能配置文件。
這第一個選項假設:
- 另一個表的所有獨特id
值的存在
- 你的表有(id, code)
SELECT
primary.id
FROM
primary -- the table with a unique list of your IDs
WHERE
'I' = ALL (SELECT code FROM yourtable WHERE yourtable.id = primary.id)
,第二個選項假定您的表有兩個索引的索引:
- (code, id)
(對於發現確實有'I'
代碼標識)
- (id, code)
(對於發現如果這些ID有任何其他代碼)
(而且是基本相似@ZacFaragher答案。)
SELECT
code_i.id
FROM
your_table code_i
WHERE
code_i.code = 'I'
AND NOT EXISTS (SELECT *
FROM yourtable
WHERE yourtable.id = code_i.id
AND yourtable.code <> 'I'
)
這往往是值得嘗試不同的變化是不同的SQL引擎處理相關子查詢更好/更差等。
請閱讀http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so - 當問一個問題/ 285557和接受的答案 –
我的不好,我試圖擁有它作爲文本,但不明白如何在消息框中實現。如果從任何地方複製(excel,sql開發人員),它將作爲一行。嘗試使用換行符鍵入,然後換行符與跳過的行一起使用,這會佔用更大的空間。將來再試一次。謝謝! – Eug
如果你在編輯你的問題時點擊小「幫助」按鈕,你會在這裏結束:http://stackoverflow.com/help/formatting它解釋了你必須格式化文本的所有選項 –