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】:

从您的示例数据来看,您似乎只需要修复您的连接条件 - 您应该加入 ids 而不是其他字符串列:

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详细使用方法

sql语法:inner join on, left join on, right join on详细使用方法

SQL JOIN连接分类[转]