簡體   English   中英

SQL查詢以某種額外條件實現某種左/右聯接

[英]SQL Query to achieve some kind of Left/Right Join with an extra condition

我正在與MS Navision合作,並且遇到以下情況。

2個表格如下圖所示,並且需要產生您在下方看到的“所需”結果。 為了識別具有NULL值的行並將其顯示在報告中,這是必需的:

表格1

+---------+-------+  
| Cluster | OGE   |  
+---------+-------+  
| B1309   | A     |  
| B1309   | B     |  
+---------+-------+  

表2

+--------+---------+-----+  
|  Type  | Cluster | OGE |  
+--------+---------+-----+  
| Liniar | B1309   | A   |  
| 44     | B1309   | A   |  
| 44     | B1309   | B   |  
+--------+---------+-----+ 

期望

+---------+-----+---------+---------+--------+  
| Cluster | OGE |  Type   | Cluster | OGE    |  
+---------+-----+---------+---------+--------+  
| B1309   | A   | Liniar  | B1309   | A      |  
| B1309   | B   | Liniar  | NULL    | NULL   |  
| B1309   | A   | 44      | B1309   | A      |  
| B1309   | B   | 44      | B1309   | B      |  
+---------+-----+---------+---------+--------+  

為了識別表1中哪些記錄在表2中沒有每種類型的對應條目,這是必需的

我的表可以有成千上萬的行,所以這就是為什么我想找到一種有效的方法來識別此行,而不用循環拋出每一行。

您至少知道如何在SQL Server或編程語言中實現這種功能,也許我可以在NAV中實現邏輯?

謝謝

這可以解決問題:

SELECT tmp.*, t2.*
FROM (SELECT * FROM Table1 t1a, (SELECT DISTINCT [Type] FROM Table2) t2a) tmp 
    LEFT JOIN Table2 t2 ON (tmp.Cluster = t2.Cluster AND tmp.OGE = t2.OGE AND tmp.Type = t2.Type)

然后只有您需要的結果:

SELECT tmp.*
FROM (SELECT * FROM Table1 t1a, (SELECT DISTINCT [Type] FROM Table2) t2a) tmp 
    LEFT JOIN Table2 t2 ON (tmp.Cluster = t2.Cluster AND tmp.OGE = t2.OGE AND tmp.Type = t2.Type)
WHERE t2.Cluster IS NULL

第一個(錯誤)答案

期望的似乎不同於您在“期望表”中顯示的東西? 看起來以下查詢將執行此操作:

SELECT Table1.Cluster 
FROM Table1 
    LEFT JOIN Table2 ON (Table1.Cluster = Table2.Cluster AND Table1.OGE = Table2.OGE)
WHERE Table2.Cluster IS NULL

使用cross join生成行,使用left join引入匹配的值:

select og.cluster, og.OGE, t.type,
       t2.cluster, t2.OGE
from table1 og cross join
     (select distinct type form table2) t left join
     table2 t2
     on t2.cluster = og.cluster and
        t2.OGE = og.OGE and
        t2.type = t.type;

暫無
暫無

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

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