我正在尝试连接两行并仅获取第一行中包含的行的地址,但我无法获取值来计算。我有以下查询,结果共计5559条记录:
SELECT
AccountID,
AccountParameter1
FROM AccountBaseExtension
如果我使用以下sql,我会得到总共110,118的重复行:
SELECT
AccountID,
AccountParameter1,
AddressParameter1
FROM AccountBaseExtension AS A
INNER JOIN CustomerAddressBase AS B ON a.AccountID = b.ParentID
我试图让它与众不同,以便我只是检索客户地址的邮政编码,但下面的查询产生了569条记录
SELECT
DISTINCT AccountID,
AccountParameter1,
AddressParameter1
FROM AccountBaseExtension AS A
INNER JOIN CustomerAddressBase AS B ON a.AccountID = b.ParentID
任何人都能告诉我这里做错了什么?
答案 0 :(得分:0)
AccountID是主键还是唯一约束的一部分?可能的原因可能是,
AccountID,AccountParameter1,AddressParameter1有重复的组合。
测试:在您的查询中尝试包含AccountBaseExtension的唯一列。使用和不使用distinct关键字执行它。
AddressParameter1在地址表中不唯一。
测试:尝试包含Address表的唯一列,并使用和不使用distinct表进行查询。例如,可能会有以下记录:
AccountID AccountParameter1 AddressParameter1 ParentID
10223490 Cisco West Tasman Dr 1
10223490 Cisco West Tasman Dr 2
答案 1 :(得分:0)
原因可能是表1-->many
和AccountBaseExtension
之间存在CustomerAddressBase
关系。即对于相同的a.AccountID,可能有多个b.parentID。例如,考虑下面的表。
<强> AccountBaseExtension 强>
*---------------*-------------------*
|AccountID |AccountParameter1 | count=1
*---------------*-------------------*
|123 |xyzc |
*---------------*-------------------*
<强> CustomerAddressBase 强>
*---------------*-------------------*
|ParentID |AddressParameter1 | count=3
*---------------*-------------------*
|123 |Addr1 |
*---------------*-------------------*
|123 |Addr2 |
*---------------*-------------------*
|123 |Addr2 |
*---------------*-------------------*
选择 帐户ID, AccountParameter1, AddressParameter1 来自AccountBaseExtension AS A. INNER JOIN CustomerAddressBase AS B ON a.AccountID = b.ParentID 将导致
*---------------*-------------------*------------------*
|AccountID |AccountParameter1 |AddressParameter1 | count=3
*---------------*-------------------*------------------*
|123 |xyzc |Addr1 |
*---------------*-------------------*------------------*
|123 |xyzc |Addr2 |
*---------------*-------------------*------------------*
|123 |xyzc |Addr2 |
*---------------*-------------------*------------------*
使用 distinct 只会产生 2 项的输出。
答案 2 :(得分:-1)
原因是表1-->many
和AccountBaseExtension
之间存在CustomerAddressBase
关系。因此JOIN
获取的记录多于第一个表中的记录。可能存在同一AccountID有多个AddressParameter1
的情况。因此,如果包含此列,则会获得比未包含的行略多的行。为了计算结果,您可以使用:
SELECT DISTINCT
AccountID,
AccountParameter1
FROM AccountBaseExtension AS A
INNER JOIN CustomerAddressBase AS B ON a.AccountID = b.ParentID
或者您甚至可以尝试以下内容:
SELECT DISTINCT AccountID, AccountParameter1 FROM
(
SELECT
AccountID,
AccountParameter1,
AddressParameter1
FROM AccountBaseExtension AS A
INNER JOIN CustomerAddressBase AS B
ON a.AccountID = b.ParentID
)A