我有三张桌子:
// table item
+-------+-------+----------+
| ID | Cat | SubCat |
+-------+-------+----------+
| A001 | 001 | 001 |
+-------+-------+----------+
| A002 | 001 | 000 |
+-------+-------+----------+
// table category
+-------+-------------+
| ID | CatName |
+-------+-------------+
| 001 | MyCategory |
+-------+-------------+
// table subcategory
+-------+--------+---------------+
| ID | CatID | SubCatName |
+-------+------------------------+
| 001 | 001 | MySubCategory |
+-------+--------+---------------+
Cat
表示该项属于
SubCat
表示该项属于
SubCat
是可选的,如果没有子类别,0
将被填充
我尝试查询:
select [Item].[ID], [Category].[CatName], [Subcategory].[SubCatName]
from [Item],
[Category],
[Subcategory]
where [Item].[Cat] = [Category].[ID]
and [Item].[SubCat] = [Subcategory].[ID]
这将成功选择记录A001
,即返回"A001", "MyCategory", "MySubCategory"
但我也想选择记录A002
,因为SubCat
是可选字段
e.g。 "A002", "MyCategory", "N/A"
我尝试使用CASE
,但似乎访问并不支持它。
有没有办法在单个SQL查询中执行此操作,例如使用JOIN
?
答案 0 :(得分:2)
我想你想要一个LEFT JOIN
:
select [Item].[ID], [Category].[CatName], [Subcategory].[SubCatName]
from ([Item] INNER JOIN
[Category]
on [Item].[Cat] = [Category].[ID]
) LEFT JOIN
[Subcategory]
on [Item].[SubCat] = [Subcategory].[ID];
您还应学习使用显式JOIN
语法,而不是FROM
子句中的逗号。