MySQL WHERE子句的子查询,用于排除数据

时间:2015-02-14 01:23:20

标签: mysql subquery

我有一个检索名称列表的查询。我需要通过添加子查询来修改查询,如果它出现在t2.exclude中,则子查询将排除t1.name。我需要一些构建子查询的帮助,我理解它将进入下面的WHERE子句:

SELECT t1.name
FROM t1
WHERE *** t1.name is not in t2.exclude ***

我需要的子查询的正确语法是什么?感谢。

1 个答案:

答案 0 :(得分:0)

试试这个:

SELECT t1.name
FROM t1
WHERE t1.name NOT IN (SELECT t2.name from t2)

您将排除t2.name

中存在的所有t1.name

编辑1

做一些测试我最终会得到一个非常奇怪的查询,但是它可以工作,你可以去:

SELECT * from t1
WHERE t1.name NOT IN (
    SELECT t1.name FROM t1, t2
    WHERE t1.name LIKE CONCAT('%', t2.name ,'%')
)

如果您想知道它是如何工作的,它会进行inverse whitelist检查

  1. 从两个表中选择所有名称(此处为笛卡尔积问题)
  2. 从t1获取名称 LOOKS LIKE t2名称(白名单)
  3. 然后使用该t1名称列表来过滤原始t1结果。 (黑名单)
  4. tldr;你在两张桌子上做了一个黑名单。

    查看SQL Fiddle

    上的测试