Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何防止SQL联接重复?_Sql Server_Sql Server 2005 - Fatal编程技术网

Sql server 如何防止SQL联接重复?

Sql server 如何防止SQL联接重复?,sql-server,sql-server-2005,Sql Server,Sql Server 2005,我有以下表格: 客户: 身份证件 客户号 公司 名字 姓氏 客户经理电子邮件 电子邮件 评论 条款 税号 铅源 默认目录 信用额度 99453 C00123456 宁静公司。 马尔科姆 雷诺兹 吉姆。smith@example.com mal@example.com 船长 1. 无效的 无效的 12345 无效的 99468 C00123456 宁静公司。 佐伊 沃什伯恩 吉姆。smith@example.com zoe@example.com 无效的 1. 无效的 无效的 无效的 无效的 99

我有以下表格:

客户:

身份证件 客户号 公司 名字 姓氏 客户经理电子邮件 电子邮件 评论 条款 税号 铅源 默认目录 信用额度 99453 C00123456 宁静公司。 马尔科姆 雷诺兹 吉姆。smith@example.com mal@example.com 船长 1. 无效的 无效的 12345 无效的 99468 C00123456 宁静公司。 佐伊 沃什伯恩 吉姆。smith@example.com zoe@example.com 无效的 1. 无效的 无效的 无效的 无效的 99960 C00123456 宁静公司。 霍班 沃什伯恩 吉姆。smith@example.com wash@example.com 无效的 1. 无效的 无效的 无效的 无效的 100088 C00123456 宁静公司。 伊娜拉 塞拉 吉姆。smith@example.com inara@example.com 无效的 1. 无效的 无效的 12345 无效的
要删除重复项,需要枚举每一行,并根据排序条件指定一个值

您可以使用cte轻松实现这一点-我相信它们在SQL Server 2005中可用,当然我无法检查

with c as(
  select *, Row_Number() over(partition by customer_number order by id) rn
  from customer
),
ca as (
  select *, Row_Number() over(partition by company order by created_at) rn
  from customer_address
)
select <columns>
from c join ca on c.company=ca.company
where c.rn=1 and ca.rn=1 and c.customer_number='C00123456'

要删除重复项,需要枚举每一行,并根据排序条件指定一个值

您可以使用cte轻松实现这一点-我相信它们在SQL Server 2005中可用,当然我无法检查

with c as(
  select *, Row_Number() over(partition by customer_number order by id) rn
  from customer
),
ca as (
  select *, Row_Number() over(partition by company order by created_at) rn
  from customer_address
)
select <columns>
from c join ca on c.company=ca.company
where c.rn=1 and ca.rn=1 and c.customer_number='C00123456'

你还尝试了其他什么连接

以下是为每个客户记录选择最新客户地址记录的一种方法:

SELECT c.*, a.* FROM
customer c
LEFT JOIN 
  ( SELECT x.* FROM customer_address x
    INNER JOIN 
    (SELECT company, MAX(created_at) AS created_at FROM customer_address 
       GROUP BY company) u
    ON u.company=x.company AND u.created_at=x.created_at
  ) a
ON a.company=c.company
WHERE c.customer_number = 'C00123456';
因此,所有其他客户地址记录将由以下人员提供:

  ( SELECT x.* FROM customer_address x
    INNER JOIN 
    (SELECT company, MAX(created_at) AS created_at FROM customer_address 
       GROUP BY company) u
    ON u.company=x.company AND NOT u.created_at=x.created_at
  ) a

你还尝试了其他什么连接

以下是为每个客户记录选择最新客户地址记录的一种方法:

SELECT c.*, a.* FROM
customer c
LEFT JOIN 
  ( SELECT x.* FROM customer_address x
    INNER JOIN 
    (SELECT company, MAX(created_at) AS created_at FROM customer_address 
       GROUP BY company) u
    ON u.company=x.company AND u.created_at=x.created_at
  ) a
ON a.company=c.company
WHERE c.customer_number = 'C00123456';
因此,所有其他客户地址记录将由以下人员提供:

  ( SELECT x.* FROM customer_address x
    INNER JOIN 
    (SELECT company, MAX(created_at) AS created_at FROM customer_address 
       GROUP BY company) u
    ON u.company=x.company AND NOT u.created_at=x.created_at
  ) a

您确定不能可靠地在fristname和lastname上加入吗?我回答说这两个栏目看起来像是造成了你的重复,但现在我很好奇为什么你不能使用这两个栏目?如果你不能可靠地使用它们,你就必须有创意地分步骤按摩,找出正确的方法。我还假设你不需要应付账款的记录?你有4行连接到10行的匹配值,所以当然4x10=40。您的Customers表中没有一个created_at,它位于您的Customers_地址中。如果您只需要一行,那么它可能是最小的客户Id?您到底尝试了哪些其他连接?可能值得学习SQL基础知识,例如在以下站点:customer\u address应该有一个customer\u id列,该列是将每个customer\u地址与客户关联的外键。为什么不呢?@DavidBrowne-Microsoft我同意并希望我能回答这个问题,但不幸的是,我没有。你确定不能可靠地在fristname和lastname加入吗?我回答说这两个栏目看起来像是造成了你的重复,但现在我很好奇为什么你不能使用这两个栏目?如果你不能可靠地使用它们,你就必须有创意地分步骤按摩,找出正确的方法。我还假设你不需要应付账款的记录?你有4行连接到10行的匹配值,所以当然4x10=40。您的Customers表中没有一个created_at,它位于您的Customers_地址中。如果您只需要一行,那么它可能是最小的客户Id?您到底尝试了哪些其他连接?可能值得学习SQL基础知识,例如在以下站点:customer\u address应该有一个customer\u id列,该列是将每个customer\u地址与客户关联的外键。为什么不呢?@DavidBrowne-Microsoft我同意并希望我能回答这个问题,但不幸的是,我没有。