Sql-Server
僅當所有子列包含相同的值時才選擇行
假設我有 3 列,Item、SubItem、Number。
我只想在所有子項的編號都為 0 時才選擇行。
例如在下表中,只應選擇 Phone 和 Pant,因為它們的所有子項的 number=0。
也不應返回重複的行。每個項目只應返回一行。
注意:還請標記 MySQL 的引擎和版本(如果您不是指 Microsoft SQL Server,則可以刪除 SQL Server 標記,這是該標記的用途)。您還應該包含更多資訊,例如表的定義(最好通過 DDL 語句)。
但是假設您的
Number
列是數值數據類型,那麼您可以在子查詢中GROUP BY
的Item
列和SUM()
列Number
來實現您想要的這樣:SELECT Item, subItem, Number FROM Table1 WHERE Item IN ( SELECT Item FROM Table1 GROUP BY Item HAVING SUM(Number) = 0 )
您還可以以更相關的方式重寫上述內容,這可能會產生更有效的查詢計劃,使用 an
INNER JOIN
代替,如下所示:SELECT T1.Item, T1.subItem, T1.Number FROM Table1 T1 INNER JOIN ( SELECT Item FROM Table1 GROUP BY Item HAVING SUM(Number) = 0 ) S ON T1.Item = S.Item
SELECT DISTINCT Item FROM table t1 WHERE NOT EXISTS ( SELECT NULL FROM table t2 WHERE t1.Item = t2.Item AND t2.Number <> 0 );
所有另一列返回沒有意義。