【发布时间】:2018-01-22 10:11:49
【问题描述】:
我有两张桌子:
表 1:
+-----------+-----------+------------------+
| ID | Value | other |
+-----------+-----------+------------------+
| 123456 | 5 | 12 |
| 987654 | 7 | 15 |
| 456789 | 6 | 22 |
+-----------+-----------+------------------+
表 2:
+-----------+-----------+------------------+
| ID | Type | other |
+-----------+-----------+------------------+
| 123456 | 00 | 2 |
| 123456 | 01 | 6 |
| 123456 | 02 | 4 |
| 987654 | 00 | 7 |
| 987654 | 01 | 8 |
| 456789 | 00 | 6 |
| 456789 | 01 | 16 |
+-----------+-----------+------------------+
现在我执行内部连接:
SELECT
table1.ID, table2.TYPE, table1.value, table2.other
FROM
table1 INNER JOIN table2 ON table1.ID = table2.ID
这里是SQLfiddle
结果表:
+-----------+-----------+---------+------------------+
| ID | Type | Value | other |
+-----------+-----------+---------+------------------+
| 123456 | 00 | 5 | 2 |
| 123456 | 01 | 5 | 6 |
| 123456 | 02 | 5 | 4 |
| 987654 | 00 | 7 | 7 |
| 987654 | 01 | 7 | 8 |
| 456789 | 00 | 6 | 6 |
| 456789 | 01 | 6 | 16 |
+-----------+-----------+---------+------------------+
这完全是我所期望的,但不是我需要的。 因为如果我现在想获取每个 ID 的值,那么第一个原因的值会增加一倍或三倍。
所需的表:
+-----------+-----------+---------+------------------+
| ID | Type | Value | other |
+-----------+-----------+---------+------------------+
| 123456 | 00 | 5 | 2 |
| 123456 | 01 | - | 6 |
| 123456 | 02 | - | 4 |
| 987654 | 00 | 7 | 7 |
| 987654 | 01 | - | 8 |
| 456789 | 00 | 6 | 6 |
| 456789 | 01 | - | 16 |
+-----------+-----------+---------+------------------+
我试图通过计算每个 id 的行数并将 Value 的总和除以该计数来实现类似的输出,但它似乎不起作用并且不是所需的输出。
另外,我尝试分组,但这似乎没有达到预期的输出。
要提一提的是,我正在使用的数据库是一个 ORACLE SQL 数据库。
【问题讨论】:
-
如果类型 '00' 包含一个值,那么对于每个 id 的类型 01 和类型 02 以此类推,是否总是如此?
-
@KaushikNayak 是的,请参阅我放在那里的 SQLfiddle 链接,该值也被复制到其他类型...
标签: oracle duplicates inner-join