簡體   English   中英

SQL Server-使用LEFT OUTER JOIN合並兩個SELECT語句的結果

[英]SQL Server - combine results of two SELECT statements using LEFT OUTER JOIN

我需要使用LEFT OUTER JOIN合並SQL Server中兩個SQL查詢的結果。

查詢1:

SELECT     dbo.saitem.itm_id, dbo.saitem.itm_num, dbo.saitemcls.cde_id
FROM         dbo.saitem INNER JOIN
                      dbo.saitemcls ON dbo.saitem.itm_id = dbo.saitemcls.itm_id
WHERE     (dbo.saitemcls.cde_id = 109)

查詢2:

SELECT     dbo.sacatalog.cat_name, dbo.sacatalogitem.itm_id
FROM         dbo.sacatalogitem INNER JOIN
                      dbo.sacatalog ON dbo.sacatalogitem.cat_id = dbo.sacatalog.cat_id
WHERE     (dbo.sacatalog.cat_name = 'CATALOG1')

我需要從查詢1返回dbo.saitem.itm_id和dbo.saitem.itm_num,其中dbo.saitem.itm_id不在查詢2中,在dbo.saitem.itm_id(查詢1)和dbo.sacatalogitem.itm_id(查詢)上匹配2)。

SQL Server服務器為2005。

您可以為此使用相關子選擇:

select
    i.itm_id, 
    i.itm_num
from
    dbo.saitem i
        inner join
    dbo.saitemcls c
        on i.itm_id = c.itm_id
where
    c.cde_id = 109 and
    not exists (
        select
            'x'
        from
            dbo.sacatalogitem ci 
                inner join
            dbo.sacatalog s
                on ci.cat_id = s.cat_id
        where
            s.cat_name = 'CATALOG1' and
            i.itm_id = ci.itm_id -- note this refers to the outer query
    );

您可以使用LEFT連接並檢查NULL,如下所示:

SELECT dbo.saitem.itm_id, dbo.saitem.itm_num, dbo.saitemcls.cde_id
FROM dbo.saitem 
JOIN dbo.saitemcls ON dbo.saitem.itm_id = dbo.saitemcls.itm_id AND dbo.saitemcls.cde_id = 109
LEFT JOIN dbo.sacatalogitem ON dbo.saitem.itm_id = dbo.sacatalogitem.itm_id
LEFT JOIN dbo.sacatalog ON dbo.sacatalogitem.cat_id = dbo.sacatalog.cat_id AND dbo.sacatalog.cat_name = 'CATALOG1'
WHERE dbo.sacatalog.cat_ID IS NULL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM