我有一个查询,如果所有记录都不为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%'
您可以看到IS NOT NULL
部分,但是我的数据库仍然显示所有带有NULL的行,为什么?
答案 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
子句中。