【问题标题】:SQL LEFT JOIN is not filling a column with values from table 2SQL LEFT JOIN 未使用表 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= ;

【问题讨论】:

  • 请提供样本数据和所需结果。

标签: mysql sql join select phpmyadmin


【解决方案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
    

    请注意,我添加了表别名并为所有列添加了它们所属的表的前缀。这使得查询更易于阅读,并且避免了不同表具有同音列时的歧义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多