【问题标题】:Display all Building IDs in where clause joining two tables where one table does not have Building_ID column在 where 子句中显示所有 Building IDs 连接两个表,其中一个表没有 Building_ID 列
【发布时间】:2016-03-23 16:11:17
【问题描述】:

我有两个如下所示的表格。以下查询仅返回两列中具有匹配企业 ID 的建筑物。但是我需要在下面的查询中返回我的 Where 子句中包含的所有 building_ID。如果 Business_Id 在 Business 表中不存在,我仍然需要查询来为 Business 表中不存在的 Business.[BusinessName] 列中的“不存在”之类的企业返回 Building_Ids。

构建表

Select odb.Building.[Building_pk], odb.Business.[Business_pk], Business.[BusinessName]
From odb.Building bld
Left Join odb.Business bus
On bld.[Business_fk] = bus.[Business_pk]
Where bld.[Building_pk] 
IN 
(
1,2,3,4,5,6,7,8,9,10
) Order By bld.[Building_pk] Desc

我需要返回这个结果集:

【问题讨论】:

    标签: sql sql-server join


    【解决方案1】:

    假设WHERE 子句中的列表具有有效建筑物,那么您只需要LEFT JOIN 而不是内部连接:

    Select bld.Business_fk, odb.Business.[Business_pk],
           Business.[BusinessName]
    From odb.Building bld Left Join
         odb.Business bus
         On bld.[Business_fk] = bus.[Business_pk]
    Where bld.[Building_pk] IN (1,2,3,4,5,6,7,8,9,10)
    Order By bld.Business_fk Desc;
    

    【讨论】:

    • 对不起,我错过了左连接。刚刚更新了查询。但是请再看一次任务,会发现它没有解决任何问题。结果集将仅返回从 1 到 6 的建筑键,并会跳过 7、8、9 和 10。
    • @enigma6205 。 . . SELECTGROUP BY(和 ORDER BY)列应该来自 bld 表,而不是 bus 表。
    猜你喜欢
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 2014-09-30
    相关资源
    最近更新 更多