INNER Объединение таблиц в SQL - PullRequest
0 голосов
/ 16 мая 2018

У меня есть две таблицы, которые я хочу объединить.

TABLE_A:

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


TABLE_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       |
+-----------+-----------+-----------+------------+

Я бы очень признателен, если кто-нибудь может мне помочь.

1 Ответ

0 голосов
/ 16 мая 2018

Будет ли это работать, Майк?Это может быть не совсем то, что вам нужно, но вы можете настроить при необходимости.

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

Удачи, Майк!

...