【问题标题】:Find not common users in sql在sql中查找不常见的用户
【发布时间】:2015-10-03 07:53:45
【问题描述】:

我有 5 张桌子。我想获取表 1 中不在 table2、table3、table4 和 table5 中的特定用户。有人可以帮我吗:)

table1(userid,discount)
table2(userid,discount)
table3(userid,discount)
table4(userid,discount)
table5(userid,discount)

【问题讨论】:

  • 您应该添加一些示例。您的输入和预期输出是什么?
  • 那么具体的要求是什么?生成仅存在于一个表中的用户列表?这五个中只有 1-4 个存在?
  • 我想获取table1中不在table2、table3、table4和table5中的特定用户

标签: mysql sql


【解决方案1】:

以下查询:

SELECT userid
FROM table1 AS t1
WHERE NOT EXISTS (
  SELECT 1 
  FROM (
    SELECT userid
    FROM table2
    UNION 
    SELECT userid
    FROM table3
    UNION 
    SELECT userid
    FROM table4
    UNION 
    SELECT userid
    FROM table5) AS t2
  WHERE t1.userid = t2.userid)

返回不存在于任何其他表中的 table1 的所有用户。

Demo here

如果您还想要table2 的所有用户在任何其他表中都不存在,那么您可以修改上述查询以返回来自table2 的用户并执行UNION在这两个查询之间:

SELECT userid
FROM table1 AS t1
WHERE NOT EXISTS (
  SELECT 1 
  FROM (
    SELECT userid
    FROM table2
    UNION 
    SELECT userid
    FROM table3
    UNION 
    SELECT userid
    FROM table4
    UNION 
    SELECT userid
    FROM table5) AS t2
  WHERE t1.userid = t2.userid)

UNION ALL

SELECT userid
FROM table2 AS t1
WHERE NOT EXISTS (
  SELECT 1 
  FROM (
    SELECT userid
    FROM table1
    UNION 
    SELECT userid
    FROM table3
    UNION 
    SELECT userid
    FROM table4
    UNION 
    SELECT userid
    FROM table5) AS t2
  WHERE t1.userid = t2.userid)

Demo here

上面可以很容易地扩展,以便合并来自所有表的用户。但是,我不得不承认,它变得非常冗长!

【讨论】:

  • @Giogros 你能告诉我如何找到表 1、2 和 3 中不在表 4 和表 5 中的共同值吗?请帮我找到答案:)
  • @Volka 好吧,这是一个不同的问题,通常不鼓励在 cmets 中回答问题。如果你想得到答案,你可以在这里发布一个不同的问题。
  • 按照你的建议我创建了一个新问题:) 请帮我找到答案:) link to the new question
猜你喜欢
  • 1970-01-01
  • 2012-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多