Left join MariaDB:左外部联接不返回行

Left join MariaDB:左外部联接不返回行,left-join,mariadb,outer-join,Left Join,Mariadb,Outer Join,我已经尝试了各种类型的连接,但我无法让这个简单的查询工作。在任何情况下,我都希望得到表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中

我已经尝试了各种类型的连接,但我无法让这个简单的查询工作。在任何情况下,我都希望得到表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窗口中运行此查询时,将返回零行


任何帮助都将不胜感激

左外部联接将从表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';

在执行
左连接时,您是将内容放入
上还是
的位置
,这很重要。(“外部”被忽略。)

这样想:

  • 如果
    ON
    为false,则保留该行,但保留所有
    null
  • 如果
    其中
    为false,则不返回该行

我找到了一种方法,可以使用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

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

好的,同意。所以我需要在查询执行后检查活动状态。可能的his副本是一个常见问题。在考虑发帖之前,请始终用谷歌搜索你的错误消息或你的问题/问题/目标的许多清晰、简洁和准确的措辞,有/没有你的特定字符串/名称和网站:stackoverflow.com和标签,并阅读许多答案。如果你发布一个问题,用一句话作为标题。请参阅投票箭头鼠标悬停文本(&T)。了解返回时的左连接:行上的内部连接联合所有不匹配的左表行,以NULL扩展。始终知道作为外部联接的一部分,您需要什么样的内部联接。上的WHERE或内部联接,在上的外部联接删除任何由NULL扩展的行后,要求右[sic]表列不为NULL,即在行上只保留内部联接,即“将外部联接转换为内部联接”。你有。请在代码问题中给出一个--cut&paste&runnable代码;示例输入(作为初始化代码)以及所需和实际输出(包括逐字错误消息);标签和版本;清晰的说明和解释。这包括您能给出的最少代码,即您显示为OK的代码,由您显示为not OK的代码扩展。(调试基础。)用于包含DBMS/product和DDL的SQL,其中包括约束和索引以及表格格式的基表初始化。
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