【发布时间】:2020-08-13 07:07:42
【问题描述】:
我有两张桌子。
第一个表称为“类型”,如下所示:
TypeID | Name
1 | Test1
2 | Test2
3 | Test3
4 | Test4
第二个表叫做“TypeParam”:
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
我想要实现的是(左?)加入两个表。结果应该 列出具有关联形状的所有类型。如果 TypeParam 表中没有形状参数列表,则结果表中的值应为 NULL。如果有 TypeParam 表中未列出的其他 TypeID 条目 类型表,结果表不应包含它们。
结果表应如下所示:
TypeID | Name | Shape
1 | Test1 | F
2 | Test2 | null
3 | Test3 | B
4 | Test4 | B
到目前为止,我尝试的是这个 SQL 语句,它已经列出了所有类型 关联的形状。但是没有列出 TypeParam 表中没有形状条目的类型。我怎样才能做到这一点?我想要结果表中缺少的条目(TypeID = 2,shape = null)。 TypeParam 表中 TypeID = 5 的条目不得列在结果表中,因为它未列在 Type 表中。
SELECT Type.TypeID AS TypeID, Type.Name AS Name, TypeParam.ParamValue AS Shape
FROM Type LEFT JOIN TypeParam ON TypeParam.TypeID = Type.TypeID
WHERE TypeParam.ParamName = 'shape'
有什么建议吗?
【问题讨论】:
-
用
AND替换WHERE -
@MKhalidJunaid 我将 WHERE 更改为 AND 并尝试在 MS Access 中对其进行测试,但如果我运行查询,则会弹出一个窗口,提示:不支持 JOIN 表达式。有任何想法吗?使用“WHERE”,查询正在运行。
-
@user7335295 您用
MySQL标记问题的事实可能会导致人们认为您使用的是MySQL而不是MS-Access....我不认为MS- Access 允许在连接谓词中使用常量,因此您需要使用子查询,例如:。LEFT JOIN (SELECT TypeID, ParamValue FROM TypeParam WHERE ParamName = 'shape') AS tp ON tp.TypeID = Type.TypeID -
@GarethD 这成功了。非常感谢!
标签: sql ms-access join left-join