【问题标题】:Retrieving uniq records with union in mysql在mysql中使用union检索uniq记录
【发布时间】:2016-01-14 22:01:36
【问题描述】:

我有两个表usersin和userout(我不能改变模式,很多系统改变必须在php中完成)。我应该在查询中获取所有用户记录,但我应该标记它们是否输入或输出,用户可能有输入记录和输出记录,如果有输出记录,我不应该在记录中显示。

我在 SQL Fiddle 中创建了包含示例数据的表:http://www.sqlfiddle.com/#!9/ac99a/1/0

您能帮我如何在此联合查询中删除重复的用户记录吗?

【问题讨论】:

  • 小提琴适合你吗?一直给我内部错误..
  • 它工作正常,我也用不同的浏览器检查过
  • 所以你想在我们的输出条目中查看所有条目,而不是两者都有的条目?

标签: mysql duplicates union


【解决方案1】:

如果您希望所有条目都在 in 或 out 表中,但不在这两个表中,那么完全外部联接将是您的朋友。

由于 MySQL 不知道这种连接,您可以使用左外连接和右外连接来模拟它,如下所示:

SELECT 
  ui.id, ui.user, 'i' 
FROM 
  usersIN ui 
LEFT OUTER JOIN 
  usersOUT uo ON ui.user = uo.user 
WHERE uo.id IS NULL 
UNION 
SELECT 
  uo.id, uo.user, 'o' 
FROM 
  usersIN ui 
RIGHT OUTER JOIN 
  usersOUT uo ON ui.user = uo.user 
WHERE ui.id IS NULL;

这应该会给你正确的输出。

一个很好的连接可视化解释可以是found here

【讨论】:

  • 谢谢,我只是想要 ((A-B) U B) 我把你的 sn-p 的第二部分改了,用它,谢谢。
猜你喜欢
  • 2010-09-19
  • 2010-10-04
  • 2013-02-26
  • 1970-01-01
  • 2018-11-13
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
  • 2021-06-02
相关资源
最近更新 更多