mysql - 为什么使用此查询时我的结果为空

标签 mysql sql database

我正在获取产品和该产品所属的类别以显示在页面上。我还得到了一些属于不同表中产品的数据。

我的查询是这样的:

SELECT cnt.id as content_id, cnt.title as content_title, cnt.featured, cnt.alias as content_alias, cnt.catid, cnt.images, cnt.state, cnt.introtext, cat.id as cat_id, cat.title as cat_title, cat.alias as cat_alias,
MAX(case when f.field_id = 4 then f.value end) as prijs,
MAX(case when f.field_id = 5 then f.value end) as prijsoud
FROM snm_fields_values f
JOIN snm_content cnt
ON cnt.id = f.item_id
JOIN snm_categories cat
ON cnt.catid = cat.id
WHERE cnt.catid = '17'
AND cnt.state = 1
GROUP BY f.item_id

我的问题是,当一个类别下没有任何文章时,所有结果都是空的。因此,在没有属于该类别的产品的类别页面上,它也不会显示类别标题。

只有当类别下有产品(snm_content)时,才会显示所有数据。

以上查询返回以下内容:

enter image description here

catid 17 下没有产品。

当我将它更改为 16(它确实有产品)时,这是我的结果:

enter image description here

我想获取那里的所有数据,所以当一个类别没有产品时,我仍然需要类别标题。

为什么产品不存在时一切都是空的?

最佳答案

我认为您需要外部联接。我不完全理解 GROUP BY,但这可能会做你想做的:

SELECT cnt.id as content_id, cnt.title as content_title, cnt.featured, cnt.alias as content_alias, cnt.catid, cnt.images, cnt.state, cnt.introtext, cat.id as cat_id, cat.title as cat_title, cat.alias as cat_alias,
       MAX(case when f.field_id = 4 then f.value end) as prijs,
       MAX(case when f.field_id = 5 then f.value end) as prijsoud
FROM snm_categories cat LEFT JOIN
     snm_content cnt
     ON cnt.catid = cat.id AND cnt.state = 1 LEFT JOIN
     snm_fields_values f 
     ON cnt.id = f.item_id 
WHERE cat.id = 17
GROUP BY cnt.id, cnt.title, cnt.featured, cnt.alias, cnt.catid, cnt.images, cnt.state, cnt.introtext, cat.id, cat.title, cat.alias

关于mysql - 为什么使用此查询时我的结果为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49693551/

相关文章:

MySQL 更新内容(如果存在)

mysql - 获取与唯一 ID 关联的特定值的计数

java - 避免程序中 JTextField setText 重复

sql - 在Oracle中处理修订

android - 自动登录和记住我如何在 Android 应用程序中工作?

mysql从另一个表的多行插入信息

javascript - D3 javascript从mysql中提取数据未捕获类型错误

php - 当有多少表时如何选择查询

database - 如何每隔一分钟从 hana 卸载表?

sql - 对什么是 superkey 或 Boyce Codd Normal 形式的误解