MYSQL 来自第一个 table 的所有行并使用 where 子句连接来自其他 table 的列
MYSQL ALL rows from first table and join columns from other table with where clause
我有 2 个 table,我想要第一个 table 的所有行,与第二个 table 的联合将取决于两件事,第一, ID_NAMES
匹配第二个,即 OPENED
列为零,否则用空值填充。范例
第一个tablenames
ID_NAMES NAME
1 test1
2 test2
3 test3
4 test4
第二个Tablesurprise
ID_SURPRICE ID_NAMES ELEMENT OPENED
1 3 lion 0
2 2 dog 1
3 1 cat 0
我想要下一个结果
ID_NAMES NAMES ID_SURPRICE ID_NAMES ELEMENT OPENED
1 test1 3 1 cat 0
2 test2 null null null null
3 test3 1 3 lion 0
4 test4 null null null null
我按以下方式执行查询,但它只 returns 与 where
一致的查询
SELECT names.*, surprise.*
FROM names
LEFT JOIN surprise
ON names.ID_NAMES = surprise.ID_NAMES
where surprise.OPENED = 0;
我要这里的答案:
基本上,如果我在我正在做的地方添加一个 inner join
,那么我必须将该子句移动到 on
SELECT names.*, surprise.*
FROM names
LEFT JOIN surprise
ON names.ID_NAMES = surprise.ID_NAMES AND surprise.OPENED = 0;
虽然您使用了左连接,但整个查询的行为类似于内部连接,这就是您没有得到预期结果的原因。
- 查看变化
SELECT names.*, surprise.*
FROM names
LEFT JOIN surprise
ON names.ID_NAMES = surprise.ID_NAMES and surprise.OPENED = 0
;
Tips: 当你使用left, right join时,这种情况你需要小心。在 where 子句中使用条件,查询将执行 inner join
我有 2 个 table,我想要第一个 table 的所有行,与第二个 table 的联合将取决于两件事,第一, ID_NAMES
匹配第二个,即 OPENED
列为零,否则用空值填充。范例
第一个tablenames
ID_NAMES NAME
1 test1
2 test2
3 test3
4 test4
第二个Tablesurprise
ID_SURPRICE ID_NAMES ELEMENT OPENED
1 3 lion 0
2 2 dog 1
3 1 cat 0
我想要下一个结果
ID_NAMES NAMES ID_SURPRICE ID_NAMES ELEMENT OPENED
1 test1 3 1 cat 0
2 test2 null null null null
3 test3 1 3 lion 0
4 test4 null null null null
我按以下方式执行查询,但它只 returns 与 where
SELECT names.*, surprise.*
FROM names
LEFT JOIN surprise
ON names.ID_NAMES = surprise.ID_NAMES
where surprise.OPENED = 0;
我要这里的答案:
基本上,如果我在我正在做的地方添加一个 inner join
,那么我必须将该子句移动到 on
SELECT names.*, surprise.*
FROM names
LEFT JOIN surprise
ON names.ID_NAMES = surprise.ID_NAMES AND surprise.OPENED = 0;
虽然您使用了左连接,但整个查询的行为类似于内部连接,这就是您没有得到预期结果的原因。
- 查看变化
SELECT names.*, surprise.*
FROM names
LEFT JOIN surprise
ON names.ID_NAMES = surprise.ID_NAMES and surprise.OPENED = 0
;
Tips: 当你使用left, right join时,这种情况你需要小心。在 where 子句中使用条件,查询将执行 inner join