【发布时间】:2018-12-13 11:03:45
【问题描述】:
我有一个查询,如果它们不是 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 行。
-
在
where子句中使用来自f的列可以有效地将left join更改为inner join。将AND f.value LIKE '%Zeeland%'放在on子句中。此外,查询可能根本没有返回 farbiondriven 在他的评论中写的任何行。 -
@farbiondriven 但是在我的 php 循环中,我仍然得到一个空项,就好像代码看到一个结果一样。
-
如果您向我们展示表中的原始数据,并告诉我们您希望查询返回哪些行,则问题会更容易理解。
-
您没有保留不带空值的行,而是保留带有 的行。因此,保留 的行。 PS 了解 LEFT JOIN 返回的内容:INNER JOIN 行加上由 NULL 扩展的不匹配的左表行。作为 LEFT JOIN 的一部分,始终知道您想要什么 INNER JOIN。在 LEFT JOIN ON 删除任何由 NULL 扩展的行之后,需要右表列不为 NULL 的 WHERE 或 INNER ON,即只留下 INNER JOIN 行,即“将 LEFT JOIN 转换为 INNER JOIN”。你有那个。