转换除左连接和内连接之外的相交和相交

时间:2014-08-13 12:17:24

标签: sql sql-server sql-server-2008-r2

我正在寻找一个软件或框架来转换相交和除了左连接和内连接在sql server中。我打算对没有set运算符的vertica使用一些查询。

有人知道一个框架或smth以编程方式执行此操作吗?

- 编辑:

我有查询:

(((SELECT subscriber_id AS MSISDN 
  FROM   dbo.a 
  GROUP  BY subscriber_id) 
  INTERSECT 
  (SELECT subscriber_id AS MSISDN 
  FROM   dbo.b
  GROUP  BY subscriber_id))
 EXCEPT
 (SELECT msisdn AS MSISDN 
 FROM   dbo.c
 WHERE  balance = 123 
 GROUP  BY msisdn))

我希望将其转换为:

select msisdn from 
(SELECT subscriber_id AS MSISDN 
  FROM   dbo.a 
  GROUP  BY subscriber_id) a
 join  
  (SELECT subscriber_id AS MSISDN 
  FROM   dbo.b
  GROUP  BY subscriber_id) b on a.msisdn = b.msisdn
 left join 
 (SELECT msisdn AS MSISDN 
 FROM   dbo.c
 WHERE  balance = 123 
 GROUP  BY msisdn) c on b.msisdn = c.msisdn
where c.msisdn is null

1 个答案:

答案 0 :(得分:0)

INTERSECT语句接受表A和表B中存在的任何行,假设两个表具有相同的元数据。

此等效的INNER JOIN将连接表A和B,其中A中的所有字段都等于B中的所有字段。

例如,如果A和B有字段:key1和key2以及数据,您的查询将如下所示:

SELECT A.key1, A.key2, A.data
INTERSECT
SELECT B.key1, B.key2, B.data;

等价物是:

SELECT A.key1, A.key2, A.data
JOIN B ON A.key1 = B.key1
      AND A.key2 = B.key2
      AND A.data = B.data;

另一方面,EXCEPT也是一样的,因为A和B应该共享相同的元数据,除了返回的行是A中B中不存在的任何东西(假设你的语句是A除了B)。

等效的LEFT JOIN是A中所有字段的A LEFT JOIN B加入B中的所有字段。