首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL select from 2 tables restrictions

SQL select from 2 tables restrictions
EN

Stack Overflow用户
提问于 2013-12-06 18:17:14
回答 3查看 82关注 0票数 3

基本上,我有两个表:管理和图片。我需要一份列表,上面有管理表中的所有属性。如果图片存在,列表只需显示第一张图片(seq=1)。

我的问题是:这个列表不能显示没有图片的属性。我该如何解决这个问题?

我有以下表格:

tblMan

代码语言:javascript
复制
propid | city | lang | ...   
  1      Mol     NL        
  2      Olen    NL        
  3      Geel    NL       
  4      Ham     FR    

tblPic

代码语言:javascript
复制
propid | lang | seq |  filename  
   1      NL     1      file11
   1      FR     1      file12
   1      NL     2      file13
   1      FR     2      file14
   1      NL     3      file15
   1      FR     3      file16
   3      NL     22     file17
   3      FR     22     file18
   3      NL     23     file19
   3      FR     23     file20
   3      NL     24     file21
   3      FR     24     file22

SELECT m.propid, m.city, p.filename
FROM  tblMan as m  
INNER JOIN tblProp as p ON m.propid = p.propid   
WHERE m.lang = 'NL' AND p.lang = 'NL' AND p.picture_index = '1'  

结果是:

代码语言:javascript
复制
propid | city | filename   
  1      Mol     file11
  3      Geel    file17

他没有得到propid 2 (Olen),因为没有图像!

我想要结果:

代码语言:javascript
复制
propid | city | filename   
  1      Mol     file11
  2      Olen    (Null or 0 or...) 
  3      Geel    file17

我尝试了子查询,联合,连接...(@_@)没有结果。

有人知道我应该使用哪种SQL语句吗?

感谢您的帮助!

EN

回答 3

Stack Overflow用户

发布于 2013-12-06 18:18:54

使用LEFT JOIN是因为您希望显示表tblMan上符合WHERE子句条件的任何记录,并移动ON子句上表tblProp的一些过滤条件

代码语言:javascript
复制
SELECT  m.propid, 
        m.city,  
        p.filename
FROM    tblMan as m  
        LEFT JOIN tblProp as p 
           ON m.propid = p.propid 
              AND p.lang = 'NL' 
              AND p.picture_index = '1'   
WHERE   m.lang = 'NL' 
票数 2
EN

Stack Overflow用户

发布于 2013-12-06 18:19:54

试试这个:

代码语言:javascript
复制
SELECT m.propid, 
       m.city, 
       p.filename 
FROM   tblman AS m 
       LEFT JOIN tblprop AS p 
              ON m.propid = p.propid 
                 AND p.lang = 'NL' 
                 AND p.picture_index = '1' 
WHERE  m.lang = 'NL' 
票数 1
EN

Stack Overflow用户

发布于 2013-12-06 18:23:37

您需要使用LEFT OUTER JOIN来代替INNER JOIN

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

https://stackoverflow.com/questions/20421356

复制
相关文章

相似问题

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