gpt4 book ai didi

MySQL 如果 A 行存在则选择 A 行和 B 行

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

我有一个包含两列、不同类型 ID 的表。如果特定 ID (2) 位于第二列 (widget_id) 中,我希望在两种情况下获得所有第一列 ID 的列表:

  1. 当同一第一列 ID 的 widget_id 也为 1 时,
  2. 当相同的第一列 ID 不存在为 1 的现有 widget_id 时。

目前,我有一个查询,它会抓取 widget_id 为 1 或 2 的所有行。我如何才能专注于我需要的内容?

我当前的查询:

SELECT *
FROM db.table
WHERE (widget_id = 1 OR widget_id = 2)
ORDER BY gadget_id;

输出:

+----------+----------+
|gadget_id |widget_id |
+----------+----------+
|100 |1 |
|101 |1 |
|101 |2 |
|102 |1 |
|103 |2 |
|104 |1 |
|104 |2 |
|105 |2 |
+----------+----------+

我正在寻找的输出:

#1 和 #2:

+----------+----------+
|gadget_id |widget_id |
+----------+----------+
|101 |1 |
|101 |2 |
|104 |1 |
|104 |2 |
+----------+----------+

只有#2:

+----------+----------+
|gadget_id |widget_id |
+----------+----------+
|103 |2 |
|105 |2 |
+----------+----------+

最佳答案

在这两种情况下,您都需要按 gadget_id 分组
对于第一种情况,条件是 1 和 2 都必须存在:

select * from tablename 
where gadget_id in (
select gadget_id
from tablename
where widget_id in (1, 2)
group by gadget_id
having count(distinct widget_id) = 2
)

对于第二种情况,条件是 1 必须不存在:

select * from tablename 
where gadget_id in (
select gadget_id
from tablename
where widget_id in (1, 2)
group by gadget_id
having sum(widget_id = 1) = 0
)

如果 widget_id 列中只有 1 和 2 值,您可以省略条件:

where widget_id in (1, 2)

在两个查询中。
请参阅demo .
结果:

查询#1

| gadget_id | widget_id |
| --------- | --------- |
| 101 | 1 |
| 101 | 2 |
| 104 | 1 |
| 104 | 2 |

查询#2

| gadget_id | widget_id |
| --------- | --------- |
| 103 | 2 |
| 105 | 2 |

关于MySQL 如果 A 行存在则选择 A 行和 B 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56028176/

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