我已经尝试了各种类型的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窗口中运行此查询时,将返回零行。
任何帮助都将受到高度赞赏!!
答案 0 :(得分:1)
在执行ON
时,是否将内容放入WHERE
或LEFT 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
如果有人知道执行此操作的正确方法,请发表评论。