SQL LEFT JOIN 未使用表 2 中的值填充列
Posted
技术标签:
【中文标题】SQL LEFT JOIN 未使用表 2 中的值填充列【英文标题】:SQL LEFT JOIN is not filling a column with values from table 2 【发布时间】:2020-08-09 05:49:56 【问题描述】:SELECT zmogaus_id, hobio_id, hobio_pav2
FROM zmogaus_hobiai
LEFT JOIN hobiai
ON zmogaus_hobiai.hobio_pav2=hobiai.hobio_pav
WHERE zmogaus_id=3
用这个我想得到
zomgaus_id =3 . hobio_id =1 . hobio_pav2 =name1 (from hobio_pav)
zomgaus_id =3 . hobio_id =2 . hobio_pav2 =name2 (from hobio_pav)
但是 hobio_pav2 保持为空列。我尝试没有 hobio_pav2 列,但问题仍然存在,即未将 hobio_pav 值添加到 hobio_id 的相应 ID。 hobio_pav2 列是空的
编辑:
样本数据:
table hobiai: id = 1, hobio_pav = name1;id = 2, hobio_pav = name2;id = 3, hobio_pav = name3;
table zmogaus_hobiai:
id =1, zmogaus_id=2, hobio_id=2, hobio_pav2 = null;
id =2, zmogaus_id=2, hobio_id=3, hobio_pav2 = null;
id =4, zmogaus_id=3, hobio_id=1, hobio_pav2 = null;
id =5, zmogaus_id=3, hobio_id=3, hobio_pav2 = null;
想要的结果:
generated table:
zmogaus_id=3, hobio_id=1, hobio_pav2=name1;
zmogaus_id=3, hobio_id=3, hobio_pav2=name3;
得到结果:
generated table:
zmogaus_id=3, hobio_id=1, hobio_pav2= ;
zmogaus_id=3, hobio_id=3, hobio_pav2= ;
【问题讨论】:
请提供样本数据和所需结果。 【参考方案1】:如果你想更新
zmogaus_hobiai
UPDATE zmogaus_hobiai zh INNER JOIN hobiai h
ON zh.hobio_id=h.id
SET zh.hobio_pav2 = h.hobio_pav
WHERE zmogaus_id=3;
你的 SELECT 看起来像这样
SELECT zmogaus_id, h.hobio_id, hobio_pav
FROM zmogaus_hobiai zh
INNER JOIN hobiai h
ON zh.hobio_id=h.id
WHERE zmogaus_id=3:
【讨论】:
我不想更新表格,我只想过滤那些具有相同 zmogaus_id 的 hobio_id,然后使用 hobio_id 和 hobio_pav 在 php 中做一些事情,我认为它会是如果我只使用左连接会更容易,但现在我认为我不仅应该将 hobio_id 提供给 zmogaus_hobiai,还应该提供 hobio_pav。对不起,我漫无边际,你给了我一个比我想要的更简单的解决方案哈哈 不,在你的情况下最好使用 INNEr JOIN,你会看到我的 SELECT 查询会给你正确的结果。【参考方案2】:你在找coalesce()
吗?
SELECT zh.zmogaus_id, coalesce(h.hobio_id, zh.hobio_pav2)
FROM zmogaus_hobiai zh LEFT JOIN
hobiai h
ON zh.hobio_pav2 = h.hobio_pav
WHERE zh.zmogaus_id = 3;
【讨论】:
【参考方案3】:从您的示例数据来看,您似乎只需要修复您的连接条件 - 您应该加入 id
s 而不是其他字符串列:
SELECT z.zmogaus_id, z.hobio_id, h.hobio_pav2
FROM zmogaus_hobiai z
LEFT JOIN hobiai h ON h.id = z.zmogaus_id
WHERE z.zmogaus_id = 3
请注意,我添加了表别名并为所有列添加了它们所属的表的前缀。这使得查询更易于阅读,并且避免了不同表具有同音列时的歧义。
【讨论】:
以上是关于SQL LEFT JOIN 未使用表 2 中的值填充列的主要内容,如果未能解决你的问题,请参考以下文章
SQL JOINSQL INNER JOIN 关键字SQL LEFT JOIN 关键字SQL RIGHT JOIN 关键字SQL FULL JOIN 关键字
SQL中left join on 、right join on、inner join on之间的区别
SQL中distinct的用法和left join查询的含义
sql语法:inner join on, left join on, right join on详细使用方法