[英]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;
您可以在exists
的if
使用它:
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.