首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表联接-如果一个表没有对应记录,则返回所有记录。

表联接-如果一个表没有对应记录,则返回所有记录。
EN

Stack Overflow用户
提问于 2014-09-29 01:46:16
回答 1查看 40关注 0票数 0

wI有一个连接查询,其中我想返回所有记录,即使specimen_image_lookup.specimen_fk没有对应的specimen.specimen_pk记录

代码语言:javascript
复制
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的记录,我如何修改这个查询以返回所有记录?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-29 01:52:41

您必须对该表和图像表使用外部联接,因为在图像表和该表之间有一个连接,您说它可能没有相关的记录:

代码语言:javascript
复制
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子句。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26091475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档