基本上,我有两个表:管理和图片。我需要一份列表,上面有管理表中的所有属性。如果图片存在,列表只需显示第一张图片(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我尝试了子查询,联合,连接...(@_@)没有结果。
有人知道我应该使用哪种SQL语句吗?
感谢您的帮助!
发布于 2013-12-06 18:18:54
使用LEFT JOIN是因为您希望显示表tblMan上符合WHERE子句条件的任何记录,并移动ON子句上表tblProp的一些过滤条件
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' 发布于 2013-12-06 18:19:54
试试这个:
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' 发布于 2013-12-06 18:23:37
您需要使用LEFT OUTER JOIN来代替INNER JOIN。
https://stackoverflow.com/questions/20421356
复制相似问题