SQL Server查询 - 从一个表到另一个表的查找

时间:2013-02-19 08:01:32

标签: sql-server

任何人都可以提供帮助 - 见下面两张表

Table - Master
Field 1 - Id
Field 2 - Name
Field 3 - Address
Field 4 - Effective End Date
Filed 5 - Last updated date

Table - Child
Field 1 - Id
Field 2 - Name
Field 3 - Address

我需要在子节点中从Parent进行查找,如果父记录不存在(基于Id,Name和Address),则更新Table Master的有效结束日期和上次更新日期。

SQL的新手,因此对这个基本查询感到苦苦挣扎。

此致

3 个答案:

答案 0 :(得分:2)

试试这样:

UPDATE  m
SET     [Effective End Date] = GETDATE()
        , [Last updated date] = GETDATE()
FROM    Master m
WHERE   NOT EXISTS
(
    SELECT  *
    FROM    Child c 
    WHERE   c.Id = m.Id
    AND     c.Name = m.Name
    AND     c.Address = m.Address
)

如果您想在Master中更新记录,而Id, Name, Address表中不存在具有相同Child的记录,则可以这样做。还有一个OUTPUT子句,它返回受更新影响的行。日期正在更新到今天的日期,但您可以将其设置为您需要的任何内容。

这是 SQL Fiddle

答案 1 :(得分:1)

  

我需要在子节点中从Parent进行查找,如果父记录不存在(基于Id,Name和Address),则更新Table Master的有效结束日期和上次更新日期。

您在寻找IFEXISTS吗?

IF EXISTS(
  SELECT 1 FROM Child c
  WHERE Id = @Id
  AND   Name = @Name
  AND   Address = @Address
) 
BEGIN
    UPDATE Master 
    SET [Effective End Date] = @EffectiveEndDate
        [Last updated date]  = @LastUpdatedDate
    WHERE Id = @Id
    AND   Name = @Name
    AND   Address = @Address 
END

答案 2 :(得分:0)

试试这个

Update Master  Set [Effective End Date] = GETDATE(), 
[Last updated date] = GETDATE()
Where id  not in ( select distinct id from Child)

简单