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
如果有人知道这样做的正确方法,请发表评论。
我已经尝试过各种类型的 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
如果有人知道这样做的正确方法,请发表评论。