mysql 选择一个联合,其中一个中的值不会出现在另一个中

标签 mysql sql

抱歉,帖子标题不好。

假设我有下表:

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一条记录?事实上,可能有两个

SEE FOR DEMO 1

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/

相关文章:

mysql - 从两个数据库中选择 - 联合但保留所有标题

php - str_replace 不适用于数据库返回

java - SQL 和 Java 使用 SQL 字符时出错

MySQL 有 if

php - 需要帮助创建基于 ui 过滤器值的查询

php - mysql 事务不适用于 innodb 表

php - 按季度从 mySQL 调用一组结果的最佳方法是什么?

mysql - 如何在mysql中使用count(*) WHERE IN

java - 通过java代码备份和恢复Hsqldb数据库

python - 高效更新 Pandas sql