用于在结果集中显示已使用记录的SQL查询

用于在结果集中显示已使用记录的SQL查询,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我有一张像下面这样的桌子 商品 现在我有另一个表名为 工作列表 b.w工作列表和商品之间存在多对多关系 工作列表\u商品 现在我想得到所有未排除的商品,但是如果商品在工作列表中使用,并且它也被标记为排除,那么我还想将结果加载到结果集中 那么加载结果的最终查询是什么呢。这个问题可以通过联合很容易地解决,但我不使用联合,因为我使用的某种ORM没有联合功能 用于获取结果集的SQL UNION查询我希望在没有UNION的情况下获得相同的结果 `SELECT this_.ID as ID,

我有一张像下面这样的桌子

商品

现在我有另一个表名为

工作列表

b.w工作列表和商品之间存在多对多关系

工作列表\u商品

现在我想得到所有未排除的商品,但是如果商品在工作列表中使用,并且它也被标记为排除,那么我还想将结果加载到结果集中

那么加载结果的最终查询是什么呢。这个问题可以通过联合很容易地解决,但我不使用联合,因为我使用的某种ORM没有联合功能

用于获取结果集的SQL UNION查询我希望在没有UNION的情况下获得相同的结果

`SELECT this_.ID as ID,
       this_.Name AS Name,
       this_.ParentID AS ParentID,
       this_.IsExcluded AS IsExcluded
       FROM   INFO_Commodities this_ WHERE this_.IsExcluded = 0  
  UNION
  SELECT this_.ID as ID,
       this_.Name AS Name,
       this_.ParentID AS ParentID,
       this_.IsExcluded AS IsExcluded
       FROM   INFO_Commodities this_ WHERE this_.IsExcluded = 1 AND this_.ID IN 
  (SELECT wc.[CommodityID]
    FROM SWF_WorkLists as w INNER JOIN SWF_WorkListCommodities AS wc on w.ID 
    = wc.WorklistID WHERE wc.[CommodityID] = this_. ID)

`

您可以使用
完全联接
(我的示例是
联合所有
,但您可以用
A.ID=B.ID和A.Name=B.Nama和…
替换
1=0


添加一些示例表数据和预期结果,以及格式良好的文本。您使用的是Oracle还是MS SQL Server?不要标记未涉及的产品。我使用的是MS SQLServer@ShahidAhmad . . . SQL Server没有“bool”或“boolean”类型。样本数据和期望的结果将非常有用。您还应该显示
联合
查询,因为这也有助于传达您想要做的事情。@Gordon Linoff抱歉,这不是布尔值,而是位。你现在可以检查了,我已经更新了我的问题
WITH A AS(
    SELECT this_.ID as ID,
    this_.Name AS Name,
    this_.ParentID AS ParentID,
    this_.IsExcluded AS IsExcluded
    FROM   INFO_Commodities this_ WHERE this_.IsExcluded = 0  
), B AS (
    SELECT this_.ID as ID,
    this_.Name AS Name,
    this_.ParentID AS ParentID,
    this_.IsExcluded AS IsExcluded
    FROM   INFO_Commodities this_ WHERE this_.IsExcluded = 1 AND this_.ID IN 
    (SELECT wc.[CommodityID]
    FROM SWF_WorkLists as w INNER JOIN SWF_WorkListCommodities AS wc on w.ID 
    = wc.WorklistID WHERE wc.[CommodityID] = this_. ID)
)
SELECT
    ID      = COALESCE(A.ID, B.ID),
    Name    = COALESCE(A.Name, B.Name)
FROM A
FULL JOIN B ON 1 = 0