簡體   English   中英

SQL查詢 - 從表中選擇不同的值

[英]SQL query - Selecting distinct values from a table

我有一張桌子,其中我有一個針對FK的多個條目。 我想找出沒有特定條目的FK的值,例如
我的表有以下條目。

PK----------------FK-----------------Column entries

1----------------100-----------------ab1
2----------------100-----------------ab2
3----------------100-----------------ab4
4----------------200-----------------ab1
5----------------200-----------------ab2
6----------------200-----------------ab3
7----------------300-----------------ab1
8----------------300-----------------ab2
9----------------300-----------------ab3
10---------------300-----------------ab4

現在,從這張表中我想過濾所有那些沒有ab3或ab4的FK。 當然,我期望不同的值,即在這種情況下結果將是FK = 100和200。
我正在使用的查詢是

select distinct(FK) 
from table1 
where column_entries != 'ab3' 
   or column_entries != 'ab4';

當然,此查詢不會獲取所需的結果。

嘗試以下方法: -

select distinct fk_col from table1
minus
(select distinct fk_col from table1 where col_entry='ab3'
intersect
select distinct fk_col from table1 where col_entry='ab4')

這將顯示所有沒有'ab3'和'ab4'的FK。 即你的情況下100和200

如果我以正確的方式得到你的問題,下面的腳本可能是解決方案。

SELECT DISTINCT(TableForeignKey)
FROM Test
WHERE TableForeignKey NOT IN (
SELECT T1.TableForeignKey
FROM Test T1 INNER JOIN Test T2 ON T1.TableForeignKey = T2.TableForeignKey
WHERE T1.TableEntry = 'ab3' AND T2.TableEntry = 'ab4')

SQLFiddle演示

您可以在HAVING中使用帶有條件聚合的GROUP BY:

SELECT FK
FROM table1
GROUP BY FK
HAVING COUNT(CASE column_entries WHEN 'ab3' THEN 1 END) = 0
    OR COUNT(CASE column_entries WHEN 'ab4' THEN 1 END) = 0
;

兩個條件聚合分別計算'ab3''ab4'條目。 如果兩者都以大於0的結果結束,則相應的FK具有'ab3''ab4' ,因此不返回。 如果至少有一個計數評估為0,則認為FK滿足要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM