让我们假设下表:
-- Register
regid descr mainid subid
1 Registration #1 1 1
2 Registration #2 2 3
3 Registration #3 1 4
4 Registration #4 2 2
-- MainCat
mainid descr
1 MainCat.1
2 MainCat.2
-- SubCat
subid descr
1 SubCat.1
2 SubCat.2
3 SubCat.3
4 SubCat.4
如何得到这样的结果:
- Description: - - MainCat - - SubCat -
Registration #1 MainCat.1 SubCat.1
Registration #2 MainCat.2 SubCat.3
Registration #3 MainCat.1 SubCat.4
Registration #4 MainCat.2 SubCat.2
我尝试了left join
之类的
SELECT
Register.*,
MainCat.descr AS MainCat,
SubCat.descr AS SubCat
FROM
Register
LEFT JOIN
MainCat ON
Register.mainid = MainCat.mainid
LEFT JOIN
SubCat ON
Register.subid = SubCat.subid
WHERE
Register.descr LIKE 'Registration%'
但不知何故,它会返回多个相同的Register-records,并使用错误的MainCat描述。我现在感觉真的很蠢:P
注意:所有ID和类别(主要和子)的描述都是100%唯一的。这也是原始的简化数据库,但它有相同的目的。
所以我的问题是:
P.S。 DISTINCT
确实有效,因为它返回(错误)不同MainCat.descr
,因此没有100%重复
答案 0 :(得分:1)
根据示例中的数据,此查询基于内部联接应显示已删除的结果
SELECT
Register.*,
MainCat.descr AS MainCat,
SubCat.descr AS SubCat
FROM Register
INNER JOIN MainCat ON Register.mainid = MainCat.mainid
INNER JOIN SubCat ON Register.subid = SubCat.subid
WHERE Register.descr LIKE 'Registration%'
当并非所有相关列都包含有效数据时,左连接很有用..在您的情况下,您在3个表之间有正确的实现,因此您应该使用内连接
答案 1 :(得分:1)
查询中唯一缺少的是FROM
子句。当我添加它时,它按预期工作:http://sqlfiddle.com/#!9/41450/1/0
答案 2 :(得分:0)
选择DISTINCT,这应该为您的左连接提供唯一的行正确
答案 3 :(得分:0)
SELECT
R.descr AS Description,
MC.descr AS MainCat,
SB.descr AS SubCat
FROM
Register AS R
LEFT JOIN
MainCat MC ON
R.mainid = MC.mainid
LEFT JOIN
SubCat SC ON
R.subid = SC.subid