我已經看到了一些關于比較多列的其他問題,但我不確定它們是否符合這個確切的需要。
我試圖確保一個表中的一對確切的列與另一個表中的完全相同的一對列存在。目標是檢查位列并將其標記為真偽(如果存在)。
該腳本的最后一部分回傳 1,但我不確定邏輯是否確保第二個表中的確切對。
腳本最后一部分比較兩個表的邏輯是否正確?

樣本資料:
CREATE TABLE #t1
(
courseid VARCHAR(10)
,courseNumber VARCHAR(10)
)
INSERT INTO #t1(
courseid
, courseNumber
)
VALUES
(3386341, 3387691)
CREATE TABLE #t2
(
courseid VARCHAR(10)
,courseNumber VARCHAR(10)
,CourseArea VARCHAR(10)
,CourseCert VARCHAR(10)
,OtherCourseNum VARCHAR(10)
)
INSERT INTO #t2(
courseid
, courseNumber
, CourseArea
, CourseCert
, OtherCourseNum
)
VALUES
(3386341 , 3387691 , 9671 , 9671 , 233321)
,(3386341 , 3387691 , 9671 , 9671 , 233321)
,(3386342 , 3387692 , 9672 , 9672 , 233322)
,(3386342 , 3387692 , 9672 , 9672 , 233322)
,(3386343 , 3387693 , 9673 , 9673 , 233323)
,(3386343 , 3387693 , 9673 , 9673 , 233323)
SELECT
CASE WHEN courseid IN (SELECT courseid FROM #t1) AND courseNumber IN (SELECT courseNumber FROM #t2) THEN 1 ELSE 0 END AS IsCourse
FROM #t1
uj5u.com熱心網友回復:
我總是會在這里選擇存在的相關性,因為它更快且 NULL 安全
select
case when exists (
select * from #t2 t2
where t2.courseid = t1.courseId and t2.courseNumber = t1.courseNumber
) then 1 else 0 end IsCourse
from #t1 t1;
uj5u.com熱心網友回復:
不,您的查詢不關聯 id 和編號,因此如果 id 存在于 t2 中的任何位置并且數字存在于 t2 中的任何位置,但不確認它們存在于同一行中,您的查詢將回傳正數。你想要EXISTS例如
SELECT
CASE WHEN EXISTS (
SELECT 1
FROM #t2 t2
WHERE t2.courseid = t1.courseid
AND t2.courseNumber = t1.courseNumber
) THEN 1 ELSE 0 END AS IsCourse
FROM #t1 t1;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/537287.html
