【问题标题】:MySql - having issues with double left joinMySql - 双左连接有问题
【发布时间】:2021-09-20 14:58:20
【问题描述】:

我在获取此双左连接以获取 listingspecificsListPrice 时遇到问题,但该信息存在于表中,无法弄清楚为什么它不包含它。这是我的 sql。

SELECT mls_subject_property.*, mls_images.imagePath, mls_forms_listing_specifics.listingspecificsListPrice  
FROM mls_subject_property 
LEFT JOIN mls_images ON mls_subject_property.mls_listingID = mls_images.mls_listingID 
LEFT JOIN mls_forms_listing_specifics ON mls_forms_listing_specifics.mls_listingID = mls_subject_property.mls_listingID AND mls_images.imgOrder = 0 
WHERE userID = 413 
GROUP BY mls_subject_property.mls_listingID

结果是这样的..

所有其他字段都回来了,但它似乎不想带回这两个项目。 这是另一张表的图片,以表明数据确实存在。

【问题讨论】:

  • 你为什么用GROUP BY没有任何聚合函数?
  • use text, not images/links, for text--including tables & ERDs。转述或引用其他文本。只提供您需要的东西并将其与您的问题联系起来。仅将图像用于无法表达为文本或增强文本的内容。在图片中包含图例/键和说明。
  • 请在代码问题中给出minimal reproducible example--剪切&粘贴&运行代码;具有期望和实际输出的示例输入(包括逐字错误消息);标签和版本;明确的规范和解释。对于包含最少代码的错误,您可以提供的代码是您显示的代码可以通过您显示的代码扩展为不正常。 (调试基础。)对于 SQL 包括 DDL 和表格初始化代码。当你得到一个你不期望的结果时,暂停你的总体目标,切到第一个具有意外结果的子表达式并说出你的期望和原因,并通过文档证明是合理的。 How to AskHelp center

标签: mysql left-join


【解决方案1】:

mls_images.imgOrder = 0 条件应与mls_images 连接,而不是mls_forms_listing_specifics

如果您不使用任何聚合函数,请不要使用GROUP BY。使用SELECT DISTINCT 防止重复。

SELECT DISTINCT mls_subject_property.*, mls_images.imagePath, mls_forms_listing_specifics.listingspecificsListPrice  
FROM mls_subject_property 
LEFT JOIN mls_images ON mls_subject_property.mls_listingID = mls_images.mls_listingID AND mls_images.imgOrder = 0
LEFT JOIN mls_forms_listing_specifics ON mls_forms_listing_specifics.mls_listingID = mls_subject_property.mls_listingID 
WHERE userID = 413 

【讨论】:

  • 嗯,我在我的代码中进行了这样的设置,但这似乎没有什么区别。 $sql = " SELECT msp.*, mls_images.imagePath, mls_forms_listing_specifics.listingspecificsListPrice "; $sql .= " FROM mls_subject_property as msp "; $sql .= "在 msp.mls_listingID = mls_images.mls_listingID 上左连接 mls_images"; $sql .= "在 msp.mls_listingID = mls_forms_listing_specifics.mls_listingID 上左连接 mls_forms_listing_specifics"; $sql .= " AND mls_images.imgOrder = 0 "; $sql .= " WHERE userID = ".$userID. " "; $sql .= " GROUP BY msp.mls_listingID ";
  • 请使用示例数据创建一个sqlfiddle
  • 尝试摆脱GROUP BY
  • 好的我知道为什么它没有显示它,但不知道如何解决这个问题。因为用户还没有上传任何图片,所以自然不会带回图片数据,但也不会带回mls_forms_listing_specifics.listingspecificsListPrice,这很奇怪不是吗?因此,在我上传图片后,它会带回图片和 mls_forms_listing_specifics.listingspecificsListPrice。即使图像尚未上传,我也希望它恢复价格
  • 是的,这很奇怪。如果您在第二个LEFT JOIN 中使用mls_images.mls_listingId,就会发生这种情况。
猜你喜欢
  • 2018-11-19
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-12
相关资源
最近更新 更多