SQL LEFT JOIN不返回正确的DATA

时间:2014-05-30 14:09:59

标签: mysql sql join left-join right-join

我正在尝试构建SQL连接表,但它没有返回我想要的正确数据。 所以我有一个滑块表,结构如下。 sliders Table structure

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

我正在尝试构建一个查询,该查询返回已发布的所有滑块和发布它们的项目,与item_id为nll的滑块连接。

所以根据上面的图片,查询应该只返回3行id(2-3-4),因为表项上的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的项目。

返回的结果如下:

returned Result

所以它返回2行而不是3行,缺少的行是id为3的行,其中item_id = null。

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

任何帮助都将非常感激..

2 个答案:

答案 0 :(得分:2)

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

假设我没有误解这个问题,你需要将其更改为AND (items.published IS NULL OR items.published = 1) - 你可能也只是做AND items.published <> 0。这基本上会检查项目是否已发布如果存在

答案 1 :(得分:0)

这是返回正确数据的最终查询。

SELECT *
 FROM sliders
  LEFT JOIN items 
    ON sliders.item_id = items.id
WHERE sliders.published =1
 AND (
   items.published IS NULL
   OR items.published =1
)