在 mysql 中检索具有联合的 uniq 记录
Retrieving uniq records with union in mysql
我有两个表 usersin 和 usersout(我不能更改架构,否则必须在 php 中完成大量系统更改)。我应该在查询中获取所有用户记录,但我应该标记它们是进还是出,而且用户可能有进出记录,如果有进出记录,我不应该在记录中显示。
我已经用 SQL Fiddle 中的示例数据创建了表格:http://www.sqlfiddle.com/#!9/ac99a/1/0
你能帮我如何删除这个联合查询中的重复用户记录吗?
如果您希望所有条目都在输入或输出 table 中有一个条目,但不是在两者中都有一个条目,那么完全外部连接将是您的朋友。
由于 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
我有两个表 usersin 和 usersout(我不能更改架构,否则必须在 php 中完成大量系统更改)。我应该在查询中获取所有用户记录,但我应该标记它们是进还是出,而且用户可能有进出记录,如果有进出记录,我不应该在记录中显示。
我已经用 SQL Fiddle 中的示例数据创建了表格:http://www.sqlfiddle.com/#!9/ac99a/1/0
你能帮我如何删除这个联合查询中的重复用户记录吗?
如果您希望所有条目都在输入或输出 table 中有一个条目,但不是在两者中都有一个条目,那么完全外部连接将是您的朋友。
由于 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