SQL从2个有限制的表中选择

时间:2013-12-06 10:17:14

标签: mysql sql select join left-join

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

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

我有以下表格:

tblMan

propid | city | lang | ...   
  1      Mol     NL        
  2      Olen    NL        
  3      Geel    NL       
  4      Ham     FR    

tblPic

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'  

结果是:

propid | city | filename   
  1      Mol     file11
  3      Geel    file17

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

我想要结果:

propid | city | filename   
  1      Mol     file11
  2      Olen    (Null or 0 or...) 
  3      Geel    file17

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

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

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

使用LEFT JOIN,因为您希望在tblMan子句上显示与WHERE子句中的条件匹配的表tblProp上的任何记录,并在ON上移动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}}子句

{{1}}

答案 1 :(得分:1)

试试这个:

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 :(得分:0)

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