SQL LEFT JOIN不返回正确的数据

Erlandmuchasaj

我试图建立一个SQL联接表,但它没有返回我想要的正确数据。所以我有一个具有如下结构的滑块表。滑块表结构

因此,该表具有引用项的外键。项目或滑块具有同一列,称为:已发布,用于指示滑块/项目是否已发布。

我正在尝试建立一个查询,该查询返回所有已发布的滑块以及它们所属的项目已发布的所有滑块,其中item_id为nll的滑块已加入。

因此,根据上面的图像,查询应该仅返回ID为(2-3-4)的3行,因为表项的ID为34(item_id = 34)的项未发布,因此它不应该位于返回值上。到目前为止,我已经建立的查询是这样的:

SELECT *
FROM sliders
LEFT JOIN items ON sliders.item_id = items.id
WHERE sliders.published =1 AND items.published =1

但是查询仅返回2行。ID为2和3的行,分别对应于ID为23、28的项。

返回结果如下:

返回结果

因此它返回2行而不是3行,丢失的行是ID为3的行,其中item_id = null。

我整天都在努力解决这个问题,但似乎我被困在这里...

任何帮助将不胜感激。

安东尼·格里斯

如果您使用LEFT JOIN而没有匹配项,则右表(items)将NULL作为其列的值。因此items.published = 1,您不能在WHERE子句中使用,并且期望这些行显示出来,因为它们NULL不相等1

假设我没有误解这个问题,那么您需要将其更改为AND (items.published IS NULL OR items.published = 1)-您可能也可以通过这样做而摆脱困境AND items.published <> 0这会有效地检查该项目被公布,如果存在的话

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章