我有两个表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/

10-13 00:50