【问题标题】:Is it possible selecting "optional" column in single query?是否可以在单个查询中选择“可选”列?
【发布时间】:2015-05-26 13:47:24
【问题描述】:

我有三张桌子:

// 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 是可选字段

例如"A002", "MyCategory", "N/A"

我尝试使用CASE,但似乎访问不支持它。

有没有办法在单个 SQL 查询中执行此操作,例如使用 JOIN

【问题讨论】:

    标签: sql ms-access oledb


    【解决方案1】:

    我想你想要一个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];
    

    您还应该学习在FROM 子句中使用明确的JOIN 语法,而不是逗号。

    【讨论】:

    • 如果字段是000 应该返回默认类别名称(类似于N/A
    • @user3896501 。 . .这是一个单独的问题,我不完全理解。我很确定答案涉及nz()iif(),但我不确定确切的逻辑是什么。
    • 我的 SQL 出现语法错误,它适用于 access 数据库吗?
    • 我想查询Item,然后返回item id及其类别和子类别名称,但子类别是可选的,当item subcat = 0时子类别名称返回“N/A”,否则返回正常名称跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    相关资源
    最近更新 更多