SQL select id其中id不在另一个表中具有多个id的条目中

时间:2018-06-05 10:47:06

标签: mysql sql

我在数据库中有两个表,我希望从第一个表中选择所有id,其中该id不在第二个表的条目中。

例如:

  • Table1有列(ID,Name)和样本数据:(1," John"),(2," Peter"),...,(333,&# 34; Mary"),(433," Rosa")
  • 表2有列(ID_not_like_Table1,ID)和样本数据:(123," 1; 2; 433"),(124," 2; 433"),(125, " 1; 433"),(126," 1; 433")

在这种情况下,应该返回ID 333,因为333永远不会出现在Table2的ID中

那么我该如何创建一个SQL查询,以便我可以从Table1获取ID不是Table2中ID的行?

如果可以在一个查询中完成,我可以在php文件中进行更多操作。

PS:这个主题的灵感来自于这个:{{3}}

提前感谢任何帮助

1 个答案:

答案 0 :(得分:2)

不要将ID列表存储在字符串中。那是错的。错误。错误。错误。为什么呢?

  • 数字应存储为数字,而不是字符串。
  • SQL的字符串处理功能非常糟糕。
  • 应正确声明外键关系。
  • SQL引擎无法优化字符串操作。
  • SQL有一个非常棒的数据结构用于存储列表。它被称为

也就是说,有时候,我们会遇到其他人真正的,非常非常糟糕的决定。有办法采取。您还没有指定数据库,但在标准SQL中,您可以执行以下操作:

concat()

只有当您无法修复数据模型时,才建议将其作为解决方法。

编辑:

MySQL使用select t1.* from table1 t1 where not exists (select 1 from table2 t2 where concat(';', replace(t2.ids, ' ', ''), ';') like concat('%;', cast(t1.id as varchar(255)), ';%'); 函数。而且,您可能需要考虑意外的空间:

CMakeLists.txt