一个选择如何只匹配每个值一次?

时间:2018-07-06 06:15:03

标签: sql select duplicates full-outer-join

我正在匹配table1table2中的数量值,这些表具有重复项和不同行数。任何数量都只能匹配一次(因此不能满足标准选择的方式),因为表中select的总量应该保持不变,就像我添加了该表中所有插入的值一样。

CREATE TABLE table1 (
    table1_amount int
);
INSERT INTO table1 (table1_amount)
VALUES
    (22),
    (11),
    (35),
    (45),
    (45),
    (65),
    (22),
    (22),
    (878),
    (56);

CREATE TABLE table2 (
    table2_amount int
);
INSERT INTO table2 (table2_amount)
VALUES
    (324),
    (43),
    (34),
    (35),
    (22),
    (22),
    (12),
    (35),
    (6);

标准选择将返回匹配{{1}的三个“ 22”到table1的两个“ 22”的6行(因此table2的每个“ 22”都匹配两次) :

table1

现在,我只希望SELECT table1.table1_amount, table2.table2_amount FROM table1 FULL OUTER JOIN table2 ON table1.table1_amount=table2.table2_amount; table1_amount table2_amount 22 22 22 22 22 22 22 22 22 22 中有2个匹配项+ 1个不匹配项,所以:

table1

您该怎么做?我在这里指示使用SQL,但是任何解决方案(Excel,Access)都可以。

2 个答案:

答案 0 :(得分:0)

尝试使用def compose[A,B,C](f: B => C, g: A => B): A => C = {f(g(_))}

Row_Number()

答案 1 :(得分:0)

尝试一下:

选择cte1.table1_amount,cte2.table2_amount 从(选择*,ROW_NUMBER()到(从table1_amount到table1_amount的分区)作为@ table1的排名)     在cte1.table1_amount = cte2.table2_amount和cte1.ranking = cte2.ranking

上左连接(选择*,ROW_NUMBER()超过(从@ table2按表2_amount顺序按表2_amount的分区)作为@ table2的排名)作为cte2。