SQL WHERE IS NOT NULL仍返回空行

时间:2018-12-13 11:03:45

标签: mysql sql database join

我有一个查询,如果所有记录都不为NULL,我将在其中选择所有记录,但仍会得到其中包含NULL行的结果。

这是我的查询

SELECT cnt.id, cnt.title as content_title, cnt.alias as content_alias, cnt.images, cnt.introtext, cnt.catid, cat.title as cat_title, cat.alias as cat_alias,
MAX(case when f.field_id = 2 then f.value end) as regio
FROM snm_content cnt
LEFT JOIN snm_categories cat
ON cat.id = cnt.catid
LEFT JOIN snm_fields_values f
ON cnt.id = f.item_id 
WHERE cnt.id IS NOT NULL AND f.value LIKE '%Zeeland%'

enter image description here

您可以看到IS NOT NULL部分,但是我的数据库仍然显示所有带有NULL的行,为什么?

1 个答案:

答案 0 :(得分:1)

大概您想要这样的查询:

SELECT cnt.id, cnt.title as content_title, cnt.alias as content_alias, cnt.images, cnt.introtext, cnt.catid, cat.title as cat_title, cat.alias as cat_alias,
       MAX(case when f.field_id = 2 then f.value end) as regio
FROM snm_content cnt LEFT JOIN
     snm_categories cat
     ON cat.id = cnt.catid LEFT JOIN
     snm_fields_values f
     ON cnt.id = f.item_id AND f.value LIKE '%Zeeland%'
WHERE cnt.id IS NOT NULL
GROUP BY cnt.id;

您有一个没有GROUP BY的聚合查询。这将是任何其他数据库中的错误。如果我们假设cnt.id是唯一的,则可以安全地对此进行汇总。

另一个问题是与f.value的比较。如果您确实打算使用ON,则应该在LEFT JOIN子句中。