我有两个没有密钥的表,我需要连接所有列而不需要检查三个条件,因为表缺少键列。
Declare @old table
(
BaseVehicle VARCHAR (50),
BaseVehicleID VARCHAR (50),
Years VARCHAR (50),
Make VARCHAR (50),
MakeID VARCHAR (50)
)
INSERT @old
SELECT '2002 Freightliner FL60', '127640', '2002', 'Freightliner', '497' UNION ALL
SELECT '2002 Freightliner FL70', '127641', '2002', 'Freightliner', '497' UNION ALL
SELECT '2014 Check', '127979', '2014', 'BMW', '31' UNION ALL-- Record Deleted
SELECT '2003 Freightliner FL50', '127655', '2003', 'Freightliner', '497' UNION ALL
SELECT '2003 check', 'test', '2003', 'Freightliner', '497' UNION ALL-- Record Deleted
SELECT '2003 Freightliner FL70', '127657', '2003', 'Freightliner', '497'
Declare @new table
(
BaseVehicle VARCHAR (50),
BaseVehicleID VARCHAR (50),
Years VARCHAR (50),
Make VARCHAR (50),
MakeID VARCHAR (50)
)
INSERT @new
SELECT '2014 Jeep Cherokee', '127768', '2014', 'Jeep', '42' UNION ALL-- New Records
SELECT '2011 Ford E-250' , '96774', '2011', 'Ford', '54' UNION ALL-- New Records
SELECT '2014 BMW Alpina B7L', '127979', '2014', 'BMW', '31' UNION ALL-- New Records
SELECT '2002 Freightliner FL60', '127640', '2002', 'Freightliner', '497' UNION ALL -- No Changes
SELECT '2002 Freightliner FL70', '127641', '2002', 'Freightliner', '497' UNION ALL-- No Changes
SELECT '2003 Freightliner FL50', '127655', '2003', 'Freightliner', '497' UNION ALL-- No Changes
SELECT '2003 Freightliner FL70', '127657', '2003', 'Freightliner', '497' -- No Changes
和输出应该看起来像
BaseVehicle, BaseVehicleID, Years, Make, MakeID ,Message
2014 Check, 127979, 2014, BMW, 31, Deleted Row
2003 check, test, 2003, Freightliner, 497, Deleted Row
'2014 Jeep Cherokee', '127768','2014','Jeep', '42' , New Records
'2011 Ford E-250' , '96774','2011','Ford', '54' , New Records
'2014 BMW Alpina B7L', '127979', '2014','BMW', '31', New Records
'2002 Freightliner FL60', '127640','2002','Freightliner', '497' , No Changes
'2002 Freightliner FL70', '127641','2002','Freightliner', '497', No Changes
'2003 Freightliner FL50', '127655','2003','Freightliner', '497' , No Changes
'2003 Freightliner FL70', '127657','2003','Freightliner', '497' , No Changes
答案 0 :(得分:1)
Select BaseVehicle,BaseVehicleID,Years,Make,MakeID,'NO CHANGES'
from
(
select BaseVehicle,BaseVehicleID,Years,Make,MakeID
from
@Old
intersect
select BaseVehicle,BaseVehicleID,Years,Make,MakeID
from
@new)NO_CHANGE_TABLE
UNION ALL
Select BaseVehicle,BaseVehicleID,Years,Make,MakeID,'RECORD DELETED'
from
(
select BaseVehicle,BaseVehicleID,Years,Make,MakeID
from
@OLD
EXCEPT
select BaseVehicle,BaseVehicleID,Years,Make,MakeID
from
@new)RECORD_DELETED_TABLE
UNION ALL
Select BaseVehicle,BaseVehicleID,Years,Make,MakeID,'NEW RECORD'
from
(
select BaseVehicle,BaseVehicleID,Years,Make,MakeID
from
@new
EXCEPT
select BaseVehicle,BaseVehicleID,Years,Make,MakeID
from
@old)NEW_RECORD_TABLE
答案 1 :(得分:1)
向表中添加2个计算列
Declare @old table
(
BaseVehicle VARCHAR (50),
BaseVehicleID VARCHAR (50),
Years VARCHAR (50),
Make VARCHAR (50),
MakeID VARCHAR (50)
OldRow AS (BaseVehicle+BaseCehicleID+Years+Make+MakeID)
)
Declare @new table
(
BaseVehicle VARCHAR (50),
BaseVehicleID VARCHAR (50),
Years VARCHAR (50),
Make VARCHAR (50),
MakeID VARCHAR (50)
NewRow AS (BaseVehicle+BaseCehicleID+Years+Make+MakeID)
)
然后使用此查询
SELECT
Old.BaseVehicle
,Old.BaseVehicleID
,Old.Years
,Old.Make
,Old.MakeID
,CASE WHEN New.OldRow IS NULL THEN 'Record Deleted' ELSE 'No Change' END AS NewColumn
FROM @Old Old
LEFT OUTER JOIN @New New ON Old.OldRow = New.NewRow
UNION ALL
SELECT
New.BaseVehicle
,New.BaseVehicleID
,New.Years
,New.Make
,New.MakeID
,'Record Added' AS NewColumn
FROM @New New
LEFT OUTER JOIN @Old Old ON New.NewRow = Old.OldRow
WHERE Old.OldRow IS NULL