gpt4 book ai didi

mysql - 如何更新此 MySQL 查询以获取正确的数据?

转载 作者:行者123 更新时间:2023-11-29 01:11:06 25 4
gpt4 key购买 nike

我有一个表 my_table 看起来像 -

+---------------------+---------------------+
| phone | status |
+---------------------+---------------------+
| 019 | NI |
+---------------------+---------------------+
| 019 | DROP |
+---------------------+---------------------+
| 019 | SALE |
+---------------------+---------------------+
| 018 | B |
+---------------------+---------------------+
| 016 | DROP |
+---------------------+---------------------+

我的查询

SELECT DISTINCT(phone) AS phone FROM my_table WHERE status NOT IN ('NI','SALE','B')

结果

+---------------------+
| phone |
+---------------------+
| 019 |
+---------------------+
| 016 |
+---------------------+

但我想像下面这样

+---------------------+
| phone |
+---------------------+
| 016 |
+---------------------+

我不希望查询结果中出现电话 019。因为手机019已经是NISALE状态了。

我如何通过更新我的查询来做到这一点?

最佳答案

我会使用反加入模式:

 SELECT t.phone
FROM my_table t
LEFT
JOIN my_table r
ON r.phone = t.phone
AND r.status IN ('NI','SALE','B')
WHERE r.phone IS NULL
GROUP BY t.phone

这样想。我们可以获得所有 phone 值的列表...

我们可以获得状态为“NI”、“SALE”或“B”的 phone 值列表。

诀窍是从“所有”列表中返回 phone 的值,不包括第二个列表中的值。

反加入只是一种选择;还有其他查询模式将返回等效结果。


其他一些选项是 NOT EXISTS 子查询...

 SELECT t.phone
FROM my_table t
WHERE NOT EXISTS ( SELECT 1
FROM my_table r
WHERE r.phone = t.phone
AND r.status IN ('NI','SALE','B')
)
GROUP BY t.phone

另一种选择是条件聚合...

 SELECT t.phone
FROM my_table t
GROUP BY t.phone
HAVING IFNULL(SUM(t.status IN ('NI','SALE','B')),0) = 0

关于mysql - 如何更新此 MySQL 查询以获取正确的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40495001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com