我有两个表,一个是Main
表,另一个是Mapping
表,简化后的表如下所示:
主要:
VALUE | CUSTNAME
123 | ADELE
323 | GORTH
242 | GORTH
345 | VIX
...
Map:
ISSUER | CATEGORY
ADELE | A
GORTH | B
DENN | B
VIX | C
...
我想做的是在我的Main
表中添加一个CATEGORY
列,所以我想使用一个左连接,但是不知怎么的,它返回的行数比我原来的要多,而且我不能一个接一个地检查它,因为它有大约30000条记录,它本身的增加是很小的,40条记录,但是它仍然是一个区别,而且它显示了出来。
注意事项和我已经尝试过的事项:
Main
表可以保存相同的CUSTNAME
,而Mapping
表是不同的,使其成为多对一关系。Mapping
表包含重复记录,因此我尝试在连接它之前先选择不同的记录- 我已经检查了NULL,以查看
Mapping
表是否遗漏了任何内容,但似乎不是这样 - 我同时使用了内连接和左连接,但返回的结果相同
我到底做错了什么,我该怎么做?
我的疑问:
SELECT A.*, B.CATEGORY AS CATEGORY
FROM Main A
LEFT JOIN
(SELECT DISTINCT * FROM Mapping) B ON A.CUSTNAME = B.Issuer
我现在的输出:
VALUE | CUSTNAME | CATEGORY
123 | ADELE | A
323 | GORTH | B
242 | GORTH | B
345 | VIX | C
... with extra 40 records
我的预期输出:
VALUE | CUSTNAME | CATEGORY
123 | ADELE | A
323 | GORTH | B
242 | GORTH | B
345 | VIX | C
... without extra 40 records
2条答案
按热度按时间sr4lhrrt1#
如果您希望消除重复的Mapping.Issuer ONLY,可以按以下步骤操作。
您可能在Map表中有如下数据:
这意味着
('VIX','C'), ('VIX','D')
不是重复项demo here
lrpiutwd2#
这一点:
Distinct *
表示ALL列的元组(组合)将被视为唯一;但是,如果有两行具有相同的Issuer,但其他列的 * any * 中的值不同,它仍然会返回多行。这反过来又会使A中的一行变成
left join
中的多行。