如何在MySQL中选择共有一列但另一列必须满足2个条件的行
这个任务对我来说有点困惑,甚至这个问题的标题也很难。已经尝试了中的答案,但不适用于我的情况,因为我需要从COL2 PC和PP获得一些特定的信息 我需要得到COL2满足2个条件的所有行='PC'或'PP'。就像这个例子 我的桌子:如何在MySQL中选择共有一列但另一列必须满足2个条件的行,mysql,Mysql,这个任务对我来说有点困惑,甚至这个问题的标题也很难。已经尝试了中的答案,但不适用于我的情况,因为我需要从COL2 PC和PP获得一些特定的信息 我需要得到COL2满足2个条件的所有行='PC'或'PP'。就像这个例子 我的桌子: ID COL1 COL2 1 100 PC • 2 100 PP • 3 100 PF 4 200 PP 5 200 PF 6
ID COL1 COL2
1 100 PC •
2 100 PP •
3 100 PF
4 200 PP
5 200 PF
6 300 PC •
7 300 PP •
期望输出:
ID COL1 COL2
1 100 PC •
2 100 PP •
6 300 PC •
7 300 PP •
此查询:
select col1
from tablename
where col2 in ('PC', 'PP')
group by col1
having count(distinct col2) = 2
返回所需的所有Col1,您可以将其与中的运算符一起使用:
看。
结果:
您可以使用以下代码:
SELECT a.* FROM (
SELECT *
FROM `table` WHERE col2 = 'pc'
UNION
SELECT *
FROM `table`
WHERE col2 = 'pp' AND col1 IN (SELECT col1
FROM `table` WHERE col2 = 'pc')
) a
ORDER BY a.col1 ASC, a.col2 ASC
这是你想要的结果:
也许我误解了,但我想知道,既然表中的ID号4的“COL2”值为“PP”,为什么它不在您想要的输出中。你能详细解释一下吗?@David使用我表格中的SELECT*,其中COL2='PC'或COL2='PP'我得到这一行:id:4,col1:200,COL2:PP.@SMS问得好。因为我不需要col2不同时满足PC和PC两个条件的行PP@David对不起,也许我解释得不够。第4行不符合标准,因为没有其他COL1=200和COL2=PCWow的条目,这正是我需要的!非常感谢你。!!
| ID | COL1 | COL2 |
| --- | ---- | ---- |
| 1 | 100 | PC |
| 2 | 100 | PP |
| 6 | 300 | PC |
| 7 | 300 | PP |
SELECT a.* FROM (
SELECT *
FROM `table` WHERE col2 = 'pc'
UNION
SELECT *
FROM `table`
WHERE col2 = 'pp' AND col1 IN (SELECT col1
FROM `table` WHERE col2 = 'pc')
) a
ORDER BY a.col1 ASC, a.col2 ASC