1

我正在尝试构建一个 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。

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

任何帮助将不胜感激..

4

2 回答 2

2

如果您使用 LEFT JOIN 并且没有匹配项,则右侧表 ( items) 将NULL作为其列的值。因此,您不能items.published = 1在 WHERE 子句中包含并期望这些行出现,因为NULLdoesn't equal 1

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

于 2014-05-30T14:14:28.670 回答
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
)
于 2014-05-30T15:00:40.953 回答