抱歉,帖子标题不好。
假设我有下表:
C1 | C2 | c3
1 | foo | x
2 | bar | y
2 | blaz | z
3 | something| y
3 | hello | z
3 | doctor | x
4 | name | y
5 | continue | x
5 | yesterday| z
6 | tomorrow | y
我正在尝试使用执行以下联合的 sql 语句: 第一次检索检索所有带有 c3 = 'y' 的记录
第二次检索检索记录的第一个实例,其中 c3 <> 'y' 并且结果不在前一个联合中
所以,对于结果,我应该看到:
C1 | C2
1 | foo
2 | bar
3 | something
4 | name
5 | continue
6 | tomorrow
所以有两个问题:1:我是否完全吸食可卡因,我认为我可以做到这一点,2:(假设我可以),我该怎么做?
最佳答案
试试这个:
SELECT a.C1, a.C2
FROM MyTable a
WHERE a.C3 = 'y'
UNION
SELECT b.C1, b.C2
FROM MyTable b
WHERE b.C3 <> 'y' AND
b.C1 not in
(
SELECT c.C1
FROM MyTable c
WHERE c.C3 = 'y'
)
更新 1
顺便问一下,为什么你想要的结果只有5
一条记录?事实上,可能有两个。
或
SELECT g.C1, MIN(g.C2) C2
FROM
(SELECT a.C1, a.C2
FROM MyTable a
WHERE a.C3 = 'y'
UNION
SELECT b.C1, b.C2
FROM MyTable b
WHERE b.C3 <> 'y' AND
b.C1 not in
(
SELECT c.C1
FROM MyTable c
WHERE c.C3 = 'y'
)
) g
GROUP BY g.C1
SEE FOR DEMO 2 (yields same result with your desired result)
关于mysql 选择一个联合,其中一个中的值不会出现在另一个中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11532726/