Mysql

僅選擇列中所有值與 id 值匹配的行

  • June 22, 2022

鑑於表

我想選擇 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

更不用說使用EXISTSor編寫的查詢了= 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';

db<>小提琴展示

引用自:https://dba.stackexchange.com/questions/313625