我有两个表usersin和usersout(我不能更改架构,否则必须在php中进行很多系统更改)。我应该在查询中获取所有用户记录,但是如果它们是入库还是出库,我应该对其进行标记,并且用户可能有入库和出库记录,如果有出库记录,则我不应该在记录中显示。
我已经在SQL Fiddle中创建了带有示例数据的表:http://www.sqlfiddle.com/#!9/ac99a/1/0
您能帮我如何在此联合查询中删除用户记录的重复项?
最佳答案
如果要在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
关于mysql - 在mysql中用union检索唯一记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33165586/