基本上,我有两个表:管理和图片。 我需要一个包含管理表中所有属性的列表。如果存在图片,则列表只需显示第一张图片(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语句?
感谢您的帮助!
答案 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
。