我正在寻找一个软件或框架来转换相交和除了左连接和内连接在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
答案 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中的所有字段。