我正在尝试构建SQL连接表,但它没有返回我想要的正确数据。 所以我有一个滑块表,结构如下。
因此表中有一个引用项目的外键。项目或滑块具有相同的列:已发布,用于指示是否已发布滑块/项目。
我正在尝试构建一个查询,该查询返回已发布的所有滑块和发布它们的项目,与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的项目。
返回的结果如下:
所以它返回2行而不是3行,缺少的行是id为3的行,其中item_id = null。
我一整天都在努力解决这个问题,但似乎我被困在这里......
任何帮助都将非常感激..
答案 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
)