MariaDB:LEFT OUTER JOIN不返回行

时间:2017-05-01 09:00:08

标签: left-join mariadb outer-join

我已经尝试了各种类型的JOINS但是我无法让这个简单的查询工作。我想在任何情况下得到表a的结果,即使表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中的列将为null。但是,当在MariaDB的SQL窗口中运行此查询时,将返回零行。

任何帮助都将受到高度赞赏!!

3 个答案:

答案 0 :(得分:1)

在执行ON时,是否将内容放入WHERELEFT JOIN这一点很重要。 (“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为false,请保留该行,但保留所有NULLs
  • 如果WHERE为false,请不要返回该行。

答案 1 :(得分:0)

左外连接将获得表a中的所有行/数据,无论它们在表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';

答案 2 :(得分:0)

我找到了一种使其与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

如果有人知道执行此操作的正确方法,请发表评论。