mysql - 在 MySQL 中获取不存在于另一个表的两列中的行

标签 mysql sql

MySQL 中有两个表,详细信息如下:

表 1:

+-------------+---------------+
 | user_id     |  isactive     |
 +-------------+---------------+
 | aaa         | 0             |
 +-------------+---------------+
 | bbb         | 0             | 
 +-------------+---------------+ 

表 2:

 +-------------+---------------+-----------+
 |store_no     |  owner        | store     |
 +-------------+---------------+-----------+
 |1234         | aaa           | aaa,xyz   |
 +-------------+---------------+-----------+
 |1006         | aaa           | aaa       | 
 +-------------+---------------+-----------+
 |1005         | ccc           | www       | 
 +-------------+---------------+-----------+

我需要从表 1 中获取条目既不在表 2 的“owner”列中也不在“store”列中的行。例如,在上面的场景中,结果集应该包含“bbb”。 我尝试使用 find_in_set、locate 等,但无法按要求获取详细信息。请帮助..

更新表格格式

查询:

select a.user_id from table1 u
left outer join table2 a
on (owner=user_id or concat(',',store,',') like concat('%,',user_id,',%'))
where (find_in_set(user_id,owner) = 0 or find_in_set(user_id,store) = 0)
and  isactive=0

仅供引用,商店列可以具有多个用户 ID 的串联值

最佳答案

您可以尝试使用NOT EXISTS

SELECT 
T1.user_id
FROM TABLE_1 T1
WHERE NOT EXISTS (
    SELECT 1 
      FROM 
    TABLE_2 T2
    WHERE T2.owner = T1.user_id OR FIND_IN_SET(T1.user_id,T2.store) > 0
);

SQL FIDDLE DEMO

建议:

Is storing a delimited list in a database column really that bad?

关于mysql - 在 MySQL 中获取不存在于另一个表的两列中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38053338/

相关文章:

mysql - 基于多个条件和 JOINS 进行一对多求和

java - 在结果集开始之前

mysql - 使用 RAND() 时如何排除 Mysql 查询中的结果

MySQL 交集

sql - 作为字符串传递给 CreateParameter 的正确方法

sql - 使用 Query 在 SQL Server 中查找所有使用游标的存储过程

java - Gobblin:java.lang.ClassNotFoundException:org.apache.gobblin.source.extractor.extract.jdbc.MysqlSource

mysql - 当 ' repair table ' 查询在 mysql 中不起作用时该怎么办?

mysql - Crystal 报表(运行时 13.0.2)未释放与 MySql 服务器的 ODBC 连接

c# - SQL Server 使用表中的一些数据生成数据