1
我要合并这两个查询:SQL连接多个
查询1 - 一个简单的内部联接,其中查询:
Select t1.c1, t1.c2, t1.c3, t2.c1
from s1.t2 t2
inner join s1.t1 t1 on t2.c6 = t1.c6
where t2.c5 >= '2014-01-01'
and t2.c5 >= '2014-01-01'
and t1.c4 = 'P'
这返回一个表,当然,4列。让我画出来的位置:
+----+----+----+-------+
| C1 | C2 | C3 | T2.C1 |
+----+----+----+-------+
| | | | |
查询2 - 有了,那么“由分区”语句删除与复制:
WITH all_col1 (ONE, TWO) AS
(
SELECT col1, col2
FROM Schema1.Table1
UNION
SELECT col1, col2
FROM Schema2.Table2
UNION
SELECT col1, col2
FROM Schema2.Table3
)
SELECT *
FROM (
SELECT ONE, TWO,
ROW_NUMBER() OVER(PARTITION BY ONE ORDER BY ONE) duplicate_count
FROM all_col1
) all_col1_w_duplicat_count
WHERE duplicate_count = 1
这将返回两列,以去掉,(这意味着所有重复如果第1列有重复多余的行被显式删除):
+-----+-----+
| ONE | TWO |
+-----+-----+
| | |
所以我想看到的是第一个查询和第二查询合并这样的,其中两个被添加到表,其中ONE matches C1:
+------+----+----+-------+-----+
| C1 | C2 | C3 | T2.C1 | TWO |
|(ONE) | | | | |
+------+----+----+-------+-----+
| | | | | |
所以,我试过了INTERSECT,添加了占位符行。返回空。
我试图让查询1 CTE,然后加入两个 - 得到了无数的错误尝试。
这里是我已经能够拿出这么迄今为止最好的 - 在查询2中的SELECT语句中加入查询1:
--ALL COL1 WITH beginning
WITH all_col1 (ONE, TWO) AS
(
SELECT col1, col2
FROM Schema1.Table1
UNION
SELECT col1, col2
FROM Schema2.Table2
UNION
SELECT col1, col2
FROM Schema2.Table3
)
--ALL COL1 SELECT duplicate_count
SELECT *
FROM (
SELECT ONE, TWO,
ROW_NUMBER() OVER(PARTITION BY ONE ORDER BY ONE) duplicate_count
FROM all_col1
-- added join opperation
join (
--SELECT from query 1
Select t1.c1, t1.c2, t1.c3, t2.c1
from s1.t2 t2
inner join s1.t1 t1 on t2.c6 = t5.c6
where t2.c5 >= '2014-01-01'
and t2.c5 >= '2014-01-01'
and t1.c4 = 'P'
-- finish join opperation
) as query1
on all_col1.ONE = query1.c1 -- <----MOST IMPORTANT PART
-- finsih ALL COL1
) all_col1_w_duplicat_count
WHERE duplicate_count = 1
此,不幸的是,不给我,结果加入了每个查询的第一列正在试图询问on all_col1.ONE = t1.c1
相反,它似乎只是给了我WITH ALL_col1。
我对sql几乎一无所知,为了正确地将这两个查询连接在一起,我需要学习什么?
能否请你告诉样本数据和预期的效果?我无法按照您的要求单独处理查询...... – Siyual
您的第二个查询方式过于复杂。 'UNION'删除重复项。 –
@Siyual对不起,我应该第一次添加这些视觉效果。我现在加了他们。 –