我有一個查詢返回多個記錄,這些記錄成對出現。記錄對列中的一些信息與前面的ID和年份相同,但其他信息具有不同的值,前列名稱類型可能爲空,另一個爲'A'。SQL幫助省略記錄
如果第三列類型等於'A'或其中一個對的另一個任意字符串,我該如何去排除SQL查詢的WHERE部分中具有相同ID和年份的記錄?我在想一個案例陳述可能會被使用,但我不確定。
我有一個查詢返回多個記錄,這些記錄成對出現。記錄對列中的一些信息與前面的ID和年份相同,但其他信息具有不同的值,前列名稱類型可能爲空,另一個爲'A'。SQL幫助省略記錄
如果第三列類型等於'A'或其中一個對的另一個任意字符串,我該如何去排除SQL查詢的WHERE部分中具有相同ID和年份的記錄?我在想一個案例陳述可能會被使用,但我不確定。
您可以使用NOT EXISTS和子查詢...
SELECT id, year
FROM table t
WHERE NOT EXISTS (SELECT * FROM table t2
WHERE ThirdColumn = 'A'
AND t2.id = t.id
AND t2.year = t.year)
,這將導致(2)表掃描,不是非常優化的解決方案 –
可以有超過2相同的ID,比如說可以有8個,但每年只能返回2個,所以每年有2個相同的ID。如果我這樣做,那麼其他年份的所有其他ID也不會被退回,我怎麼能在年份和ID都包括在內呢?我將需要將此語句移植到水晶語法,但現在只需獲取SQL查詢將啓動我。 –
@ K Ivanov - 如果他沒有這些領域的索引,那麼有更大的問題... – JNK
並非如此簡單。
select t.*
from tbl t
left join (
select t2.id, t2.year
from tbl t2
group by t2.id, t2.year
having count(*) > 1 and
count(case when type='A' then 1 end) *
count(case when type='A' then null else 1 end) > 0
) X
on X.id = t.id and X.year = t.year
WHERE X.id is null
count(*) > 1
有助於我們認爲那裏是至少具有相同ID的一對/年count(case..) > 0
■確定說,「type
S的至少一個是‘A’,並在至少一個不LEFT JOIN + WHERE IS NULL
是一個典型的技術只顯示在左連接失敗的數據,即ID /符合子查詢的條件,對年度取出
是的,你可以使用大小寫,並在最後過濾,如果你提供一些樣本,我們可以給你更準確的答案 –