wI有一个连接查询,其中我想返回所有记录,即使specimen_image_lookup.specimen_fk没有对应的specimen.specimen_pk记录
SELECT * FROM specimen, topography_index, morphology, specimen_image_lookup, image
WHERE
SUBSTRING(specimen.topography_index, 2, 2) = topography_index.topography_index_code
AND
morphology.morphology_code = specimen.snop_code
AND
specimen_image_lookup.specimen_fk = specimen.specimen_pk AND image.image_pk = specimen_image_lookup.image_fk
AND
topography_index.topography_index_code IN('".implode("','",$sub_cat)."')
GROUP BY
specimen.specimen_pk即使specimen_image_lookup没有specimen.specimen_pk的记录,我如何修改这个查询以返回所有记录?
发布于 2014-09-29 01:52:41
您必须对该表和图像表使用外部联接,因为在图像表和该表之间有一个连接,您说它可能没有相关的记录:
select *
from specimen
join topography_index
on substring(specimen.topography_index, 2, 2) =
topography_index.topography_index_code
join morphology
on morphology.morphology_code = specimen.snop_code
left join specimen_image_lookup
on specimen_image_lookup.specimen_fk = specimen.specimen_pk
left join image
on image.image_pk = specimen_image_lookup.image_fk
where topography_index.topography_index_code in ('".implode("', '",$sub_cat)."')此外,通常对所有联接条件使用join子句是一个好主意。
我删除了GROUP BY子句,因为在SELECT列表中没有聚合函数,而且语法错误,在除MySQL之外的任何数据库中,它都会返回一个错误。只有在聚合某物时才使用GROUP BY子句。
https://stackoverflow.com/questions/26091475
复制相似问题