MariaDB:LEFT OUTER JOIN 没有 return 行

MariaDB: LEFT OUTER JOIN does not return row

我已经尝试过各种类型的 JOINS,但我无法使这个简单的查询起作用。我想在任何情况下都得到 table a 的结果,即使 table b 中没有相应的条目。我试过了:

SELECT a.user_id,
       a.user_name,
       b.first_name
FROM   users a
LEFT OUTER JOIN members b
ON a.member_uid = b.uid
WHERE  (a.user_name = 'TEST'
    AND b.active = 1)

在这种情况下,b 中没有 b.active = 1 的条目。但我假设将返回 a 中所有需要的列,而 b 中的列将为空。但是当 运行 这个查询在 MariaDB 的 SQL window 中时,返回零行。

非常感谢任何帮助!!

Left Outer Join 将从 table a 中获取所有 rows/data,无论它们在 table b 中是否匹配。但是您再次通过在 where 子句中放置条件来过滤掉数据。因为 b 中没有 b.active = 1 的条目,所以不会有输出。从查询中删除 b.active = 1,如下所示:

SELECT a.user_id,
   a.user_name,
   b.first_name
FROM   users a
LEFT OUTER JOIN members b
ON a.member_uid = b.uid
WHERE a.user_name = 'TEST';

LEFT JOIN的时候把东西放在ON还是WHERE很重要。 ("OUTER" 被忽略。)

SELECT a.user_id,
       a.user_name,
       b.first_name
FROM   users a
LEFT OUTER JOIN members b
    ON a.member_uid = b.uid
   AND b.active = 1              -- Note
WHERE  a.user_name = 'TEST'

这样想:

  • 如果 ON 为假,保留该行,但所有 NULLs.
  • 如果 WHERE 为假,则不要 return 该行。

我找到了一种让它与 mariaDB 一起工作的方法,你可以从两个表中进行子查询,然后加入。不是最好的,但它有效:

SELECT a.user_id,
       a.user_name,
       b.first_name
FROM   (select * from users WHERE user_name = 'TEST') a
LEFT JOIN (SELECT * from members WHERE active = 1) b
ON a.member_uid = b.uid

如果有人知道这样做的正确方法,请发表评论。