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