Mysql 如果联接表中没有可匹配的内容,如何在联接查询中仍然从表中获取数据
我有一个包含两个表的数据库Mysql 如果联接表中没有可匹配的内容,如何在联接查询中仍然从表中获取数据,mysql,sql,Mysql,Sql,我有一个包含两个表的数据库 snm\u内容和snm\u字段值 SELECT cnt.*, MAX(case when f.field_id = 4 then f.value end) as service_icon FROM snm_fields_values f JOIN snm_content cnt ON cnt.id = f.item_id WHERE cnt.catid = 9 AND cnt.state = 1 ORDER BY cnt.ordering snm\u内容有很多字段,
snm\u内容
和snm\u字段值
SELECT cnt.*,
MAX(case when f.field_id = 4 then f.value end) as service_icon
FROM snm_fields_values f
JOIN snm_content cnt
ON cnt.id = f.item_id
WHERE cnt.catid = 9
AND cnt.state = 1
ORDER BY cnt.ordering
snm\u内容
有很多字段,这里只有id
相关,而snm\u字段值
有三个字段,项目id
,字段id
和值
snm\u内容的id
字段与snm\u字段值的item\u id
字段相同
我想从snm\u content
中获取所有数据,并连接snm\u字段\u值
,但如果无法连接任何内容,还想从snm\u content
中检索数据。因此,如果snm\u字段\u值中没有匹配的item\u id
,那么仍然可以从snm\u内容中获取数据
问题在于,如果snm\u字段值中存在匹配的item\u id
,则以下查询只能从snm\u content
获取结果
SELECT cnt.*,
MAX(case when f.field_id = 4 then f.value end) as service_icon
FROM snm_fields_values f
JOIN snm_content cnt
ON cnt.id = f.item_id
WHERE cnt.catid = 9
AND cnt.state = 1
ORDER BY cnt.ordering
如果snm\u内容中的id
不存在item\u id
,则不会从snm\u内容中检索任何内容。我怎样才能解决这个问题?我已尝试切换检索数据的顺序,但结果相同。使用左连接:
SELECT cnt.*,
MAX(case when f.field_id = 4 then f.value end) as service_icon
FROM snm_content cnt LEFT JOIN
snm_fields_values f
ON cnt.id = f.item_id
WHERE cnt.catid = 9 AND cnt.state = 1
GROUP BY cnt.id
ORDER BY cnt.ordering;
请注意,这会添加分组依据
,因此在内容表中,每个组有一行
还可以使用相关子查询:
SELECT cnt.*,
(SELECT MAX(case when f.field_id = 4 then f.value end)
FROM snm_fields_values f
WHERE cnt.id = f.item_id
) as service_icon
FROM snm_content cnt
WHERE cnt.catid = 9 AND cnt.state = 1
GROUP BY cnt.id
ORDER BY cnt.ordering;
您有一个SUM()
,但没有分组依据。