首页 > 解决方案 > sql中的INNER连接表

问题描述

我有两张表要连接在一起。

表_A:

+--------+-----------+---------+
| row_id | category  | val_1   |
+--------+-----------+---------+
| 1      | cat1      | 6.5     |
| 1      | test      | 6.5     |
| 1      | dog1      | 2.1     |
+--------+-----------+---------+

表_B:

+-----------+-----------+
| row_id    | val_2     |
+-----------+-----------+
| 1         | 2.0       |
+-----------+-----------+

当我使用 INNER JOIN 时,得到如下结果:

+-----------+-----------+-----------+------------+
| row_id    | category  | val_1     | val_2      |
+-----------+-----------+-----------+------------+
| 1         | cat1      | 6.5       | 2.0        |
| 1         | test      | 6.5       | 2.0        |
| 1         | dog1      | 2.1       | 2.0        |
+-----------+-----------+-----------+------------+

但我不想重复 Val_2 的结果。我想要这样的结果:

+-----------+-----------+-----------+------------+
| row_id    | category  | val_1     | val_2      |
+-----------+-----------+-----------+------------+
| 1         | cat1      | 6.5       | 2.0        |
| 1         | test      | 6.5       | NULL       |
| 1         | dog1      | 2.1       | NULL       |
+-----------+-----------+-----------+------------+

如果有人可以帮助我,我将不胜感激。

标签: sql-server-2012inner-join

解决方案


这行得通吗,迈克?这可能不是您所需要的,但您可以根据需要进行调整。

SELECT 
    TABLE_A.*,
    CASE ROW_NUMBER() OVER(PARTITION BY TABLE_B.val_2 ORDER BY TABLE_A.row_id DESC) 
        WHEN 1 THEN TABLE_B.val_2
        ELSE NULL
    END as val_2
FROM
    TABLE_A
INNER JOIN
    TABLE_B ON  TABLE_A.row_id = TABLE_B.row_id
ORDER BY
    TABLE_A.Row_id

推荐阅读