我有一個表結構有很多欄位
| table_id | 名稱表 | name_filed | PK | FK |
|---|---|---|---|---|
| 1 | 人 | ID | PK | |
| 1 | 人 | 姓名 | ||
| 1 | 人 | 年齡 | ||
| 2 | 狗 | ID | PK | |
| 2 | 狗 | 姓名 | ||
| 2 | 狗 | 所有者 | fk | |
| 3 | 電話 | ID | PK | |
| 3 | 電話 | 姓名 | ||
| 3 | 電話 | 所有者 | fk |
在這種情況下,如何獲取與另一個表沒有任何外鍵的父表的 ID,預期結果為 1
我試過了
select distinct table_id from tables_structure where fk!=''
我也嘗試過 group by
select table_id from tables_structure where fk!=''
group by table_id
having fk!=''
uj5u.com熱心網友回復:
第一個問題是您正在與一個空字串進行比較,通常我們希望空值由一個null值表示,因此嘗試使用比較IS NULL
select distinct table_id from tables_structure where fk IS NULL
但這在這里不太可能對您有所幫助,您的資料代表一個UNPIVOT結構,如果您在子句中使用 a,您的第二次嘗試將起作用COUNT,HAVING在這里我們甚至不必比較空值,因為COUNT將為我們排除空值!
select table_id
from tables_structure
group by table_id
having COUNT(fk) = 0
如果這些值確實是空字串,而不是空值,那么我們仍然可以使用帶有空值的計數,方法''是使用以下方法將其視為空值NULLIF:
select table_id
from tables_structure
group by table_id
having COUNT(NULLIF(fk,'')) = 0
我們不能只過濾,fk <> ''因為這會修改資料集并回傳所有記錄。
您可以使用SUMoverCASE陳述句來計算每個記錄的 a 1or 0,但現在事情變得復雜了:
select table_id
from tables_structure
group by table_id
having SUM(CASE fk WHEN '' THEN 0 ELSE 1)) = 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/430080.html
上一篇:存盤程序比較兩個表并插入/更新值
下一篇:根據時間間隔聚合我的SQL結果?
