如果子查询没有结果,MySQL 应该返回行

标签 mysql subquery sql-like not-exists

我需要一个查询,我正在尝试一些方法来实现它,但仍然无法解决我的问题。我有一个表和数据存储在一个用逗号分隔的字段中。所以数据看起来像 '120,122,145,136'。我将此表命名为 table1

另一个表有 1300 行。我正在尝试获取表 1 中未包含的行。

这是我写的查询。这无法正常工作。如何获得正确的结果?

SELECT a.ddd FROM table2 a 
 WHERE NOT EXISTS 
      (SELECT id 
       FROM table1 
       WHERE data_separated_comma NOT LIKE '%a.ddd%')

我希望有人能帮助我。

最佳答案

存储逗号分隔的关联确实是一个坏主意你应该注意改变你的模式并通过使用一个连接表来规范它,它包含你的表 1 和 2 之间的关系,对于你当前的问题,你可以使用 find_in_set

SELECT a.ddd 
FROM table2 a 
left join table1 b
 on(find_in_set(a.ddd,data_separated_comma ) > 0)
 WHERE b.id is null

Database Normalization

关于如果子查询没有结果,MySQL 应该返回行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25835490/

相关文章:

mysql - 捕获字符串中的数字

php - SQL 查询速度慢的股票

mysql - PyMySQL 可以用作 Python 的 MySQL/Connector 的直接替代品吗?

sql-server - Sql Server - 子查询中的用户CTE

mysql - 是否可以使用别名作为 LIKE 搜索值?

mysql - 无法连接为使用 Ansible 创建的 MySQL 用户

mysql - 获取三级子查询中的父列

mysql - 从字符串列表中打印 user_id 列表

SQLite 查询, 'LIKE'

PHP-MySql : Like Query with modified Table Column