Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如果联接表中没有可匹配的内容,如何在联接查询中仍然从表中获取数据_Mysql_Sql - Fatal编程技术网

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()
,但没有
分组依据。