MySql:在记录不存在的情况下两次连接同一个表

标签 mysql sql

我有一个表数据:

 +-------+-----------+------+-------+-------------+
 | id    | client_id | type | name  |    status   |
 +-------+-----------+------+-------+-------------+
 |   523 |   2       | one  | a     |   verified  |
 |   526 |   1       | one  | a     |   verified  |
 |   527 |   1       | one  | b     |   verified  |
 |   527 |   1       | two  | b     |   verified  |
 +-------+-----------+------+---------------+-----+

我需要获取 client_id 的那些 where type='one' and name='a' and status='verified'' AND DON' T 有一条记录,其中 type=onename=b

在上面的表格中,结果将包括 client_id = 2

如何编写这样的查询?

最佳答案

您可以使用带有 NOT EXISTS 条件的相关 suqbuery 来过滤掉不需要的记录(即存在具有相同 client_id 的另一条记录的记录,其中 >type = 'one'name = 'b')

SELECT *
FROM data d
WHERE 
    type = 'one' 
    AND name = 'a' 
    AND status = 'verified'
    AND NOT EXISTS (
        SELECT 1 
        FROM data d1
        WHERE d1.client_id = d.client_id AND d1.type = 'one' and d1.name = 'b'
    )

关于MySql:在记录不存在的情况下两次连接同一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55291326/

相关文章:

php - 无法在 MySQL 的日期字段中插入 NULL

mysql - 使用 MySQL 计算字符串中字符的出现次数

mysql - 有没有优化/更好的方法来编写这个查询?

Mysql创建存储过程语法错误

mysql - mysql 表中的数据表示

mysql - 将文本时间戳转换为日期

javascript - 使用javascript中的onclick获取输入标签中每个值的值

MySQL : Get lastest updated row from 2 tables?

sql select查询3个表

php - fatal error :在 Code Igniter 中调用未定义的方法 CI_DB_mysql_driver::inset()