问题描述
我有两个桌子。
第一个表称为“类型”,如下所示:
onClick={console.log}
第二个表称为“ TypeParam”:
TypeID | Name
1 | Test1
2 | Test2
3 | Test3
4 | Test4
我要实现的目的是(左?)同时连接两个表。结果应该 列出具有相关形状的所有类型。如果TypeParam表中没有形状参数列表,则结果表中的值应为NULL。如果有 TypeParam表中未列出的其他TypeID条目 类型表,结果表不应包含它们。
结果表应如下所示:
TypeID | ParamName | ParamValue
1 | heading | 0.349
1 | motion | 1
1 | shape | F
1 | slumber | 0|0
3 | motion | 2
3 | shape | B
4 | shape | B
5 | shape | F
到目前为止,我一直在尝试的SQL语句已经列出了alle类型,并带有 相关的形状。但是没有列出在TypeParam表中没有形状条目的类型。我该如何实现?我想要结果表中缺少的条目(TypeID = 2,shape = null)。在TypeParam表中TypeID = 5的条目不能在结果表中列出,因为它不在Type表中列出。
TypeID | Name | Shape
1 | Test1 | F
2 | Test2 | null
3 | Test3 | B
4 | Test4 | B
有什么建议吗?
解决方法
将您的TypeParam.ParamName = 'shape'
条件移动到ON Cluase
SELECT Type.TypeID AS TypeID,Type.Name AS Name,TypeParam.ParamValue AS Shape
FROM Type LEFT JOIN TypeParam ON TypeParam.TypeID = Type.TypeID
and TypeParam.ParamName = 'shape'
,
正如@GarethD在评论中指出的那样,我正在使用MS-Access,因此使用子查询解决了该问题。使用LEFT JOIN (SELECT TypeID,ParamValue FROM TypeParam WHERE ParamName = 'shape') AS tp ON tp.TypeID = Type.TypeID
解决了这个问题。
谢谢!
在MS Access中,最简单的解决方案可能是相关子查询:
SELECT t.*,(SELECT tp.ParamValue
FROM TypeParam as tp
WHERE tp.TypeID = t.TypeID AND tp.ParamName = "shape"
) as Shape
FROM Type as t;
注意:如果给定的TypeId
有多个“形状”,则将报告错误。如果有可能,我建议您问一个 new 问题,并提供适当的示例数据并说明您想做什么。