SQL查询以某种额外条件实现某种左/右联接

时间:2019-02-22 07:12:47

标签: c# sql navision

我正在与MS Navision合作,并且遇到以下情况。

2个表类似于下图中,需要产生您在下面看到的结果为“所需”。为了识别具有NULL值的行并将其显示在报告中,这是必需的:

TABLE1

'resizableColumns="true"'

表2

primeng

所需

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

这是必要的,以便识别表1中哪些记录在表2中没有每种类型的对应条目

我的表可以有成千上万的行,所以这就是为什么我想找到一种有效的方法来识别此行,而不用循环抛出每一行。

您至少知道如何在SQL Server或编程语言中实现这种功能,也许我可以在NAV中实现逻辑?

谢谢

1 个答案:

答案 0 :(得分:0)

这可以解决问题:

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