Mysql
僅選擇列中所有值與 id 值匹配的行
鑑於表
我想選擇 seq_status 為 A(2 和 3)的不同 seq_id,如果其中一個值不同,則不返回
到目前為止,我有一些看起來像這樣的東西
SELECT distinct(s.seq_id) FROM sequence s having s.seq_id IN ( select z.seq_id from sequence z group by z.seq_id, z.seq_status having z.seq_status = "A" )
但這會返回任何帶有 seq_status A 的 seq_id ,我只尋找 seq_id ,其中 seq_status 都匹配所需的值
還有另一種選擇:
# All non-NULL seq_status values per seq_id contain 'A' SELECT s.seq_id FROM sequence AS s GROUP BY s.seq_id HAVING SUM(s.seq_status = 'A') = COUNT(*);
這是有效的,因為比較運算的結果是 1 (TRUE)、0 (FALSE) 或 NULL。
有很多替代方案,包括:
HAVING COUNT(DISTINCT seq.status) = 1 AND MIN(seq_status)='A' HAVING SUM(s.seq_status <> 'A' OR seq.status IS NULL) = 0
更不用說使用
EXISTS
or編寫的查詢了= ALL
。或者,如果您想忽略 NULL:
SELECT s.seq_id FROM sequence AS s GROUP BY s.seq_id HAVING MIN(s.seq_status) = 'A' AND MAX(s.seq_status) = 'A';