繁体   English   中英

匹配SQL Server中两个表之间的列值

[英]Match the column values between two tables in SQL Server

我有两个表:

预订名称

   +-------+-------+-------+-------+  
   |            Name               |  
   +-------+-------+-------+-------+   
   | Brad Pitt                     |  
   | Morgan Freeman                |  
   | Bobby deniro                  |  
   +-------+-------+-------+-------+

预订详情

   +-------+-------+-------+-------+  
   | Name           | ID   | Eid   |  
   +-------+-------+-------+-------+   
   | Brad Pitt      | 1    | ab123 |  
   | Morgan Freeman | 2    | pq123 |  
   | Bobby deniro   | 3    | rs123 |  
   +-------+-------+-------+-------+

我必须将ReservationName中的名称与BookingDetails匹配。

如果它们相同(计数和值)。

我的上面的示例应返回true,因为名称相同且计数为3。上述条件是我在存储过程中使用的If if逻辑的一部分。

确定两个表中都没有的名称的一种方法是使用full outer join

select *
from ReservationName rn full outer join
     BookingDetails bd
     on rn.name = bd.name
where rn.name is null or bd.name is null;

您可以在existsif使用它:

if (exists (select 1
            from ReservationName rn full outer join
                 BookingDetails bd
                 on rn.name = bd.name
            where rn.name is null or bd.name is null
           )
    )
begin
    -- not matching code
end;

注意:此版本假定(如您的问题一样)每个表中的名称都是唯一的。 如果不是这种情况,请询问另一个问题,以获取有关如何处理重复名称的更多信息。 特别解决表之间重复项的数量不同时该怎么办的问题。

根据我的理解,请执行以下查询:

SELECT 
    COUNT(Name)
FROM 
    (SELECT R.Name
    FROM ReservationName R 
    INNER JOIN BookingDetails B ON R.Name = B.Name) A

如果这不是您想要的解决方案,请详细描述问题。

根据您的要求:

  • 支票计数匹配。
  • 支票名称匹配。

使用下一个IF代码:

IF (
        /*check count is matched*/
        (SELECT COUNT(Name) FROM ReservationName) = (SELECT COUNT(Name) FROM BookingDetails) 
        AND
        /*check name is matched*/
        (SELECT COUNT(Name) FROM ReservationName where Name  
            NOT IN (SELECT Name FROM BookingDetails)) = 0
    )
BEGIN
    SELECT 1 -- Name and count are matched
END
ELSE
BEGIN
    SELECT 0
END
if 
(
not exists (
SELECT Name FROM ReservationName 
EXCEPT
SELECT Name FROM BookingDetails
           )
and
not exists ( SELECT Name FROM ReservationName
             except
              SELECT Name FROM BookingDetails 
           )
)
BEGIN
    SELECT 1 -- Name and count are matched
END
ELSE
BEGIN
  SELECT 0
END

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM