是否可以选择"可选"单个查询中的列?

时间:2015-05-26 13:47:25

标签: sql ms-access oledb

我有三张桌子:

// 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表示该项属于

的类别ID

SubCat表示该项属于

的子类别ID

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

1 个答案:

答案 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子句中的逗号。