programing

SQL 쿼리: 관련된 두 테이블 간에 누락된 행을 찾습니다.

skycolor 2023. 3. 23. 22:33
반응형

SQL 쿼리: 관련된 두 테이블 간에 누락된 행을 찾습니다.

테이블이 두 개 있습니다.

표 A

  • 아이디
  • ABC_ID
  • 동작하지 않다

표 B

  • 아이디
  • ABC_ID
  • 동작하지 않다

이들 2개의 테이블은 를 통해 서로 직접 관련지어집니다.ABC_ID기둥.

나는 모든 것을 찾고 싶다.VAL같은 ABC_에 대해 표 B에 존재하지 않는 표 A의 열 값아이디

SELECT A.ABC_ID, A.VAL FROM A WHERE NOT EXISTS 
   (SELECT * FROM B WHERE B.ABC_ID = A.ABC_ID AND B.VAL = A.VAL)

또는

SELECT A.ABC_ID, A.VAL FROM A WHERE VAL NOT IN 
    (SELECT VAL FROM B WHERE B.ABC_ID = A.ABC_ID)

또는

SELECT A.ABC_ID, A.VAL LEFT OUTER JOIN B 
    ON A.ABC_ID = B.ABC_ID AND A.VAL = B.VAL FROM A WHERE B.VAL IS NULL

이러한 쿼리는 ABC_를 필요로 하지 않습니다.ID는 테이블 B에 있습니다.내 생각에 그건 네가 원하는 것 같아.

JOIN을 기반으로 한 다른 솔루션.
조인(Join)은 테이블A와 테이블B의 콘텐츠를 링크에 사용하여 조합합니다.ON요청의 일부입니다.

SELECT
    *
FROM
    A
INNER JOIN
    B
ON
    B.ABC_ID = A.ABC_ID
WHERE
    B.VAL <> A.VAL

기본적으로 A테이블과 B테이블을 ABC_로 조합하고 있습니다.ID를 확인한 후 A의 위치를 확인합니다.VAL은 B와 동일하지 않습니다.VAL. 결합된 데이터INNER JOIN는 테이블 A와 B의 양쪽 모두에 ABC_가 있는 레코드만을 포함합니다.ID가 있습니다().

@start_date DATETIME= '04-01-date'; DATETIME= '04-30-declares'; DATIME= '04-30-declares'; DATE = @min = max(test_uid), = max(test_uid)를 테스트에서 선택합니다. 여기서 DATE > = @min @START_D, DATE, DATE, DATE, DATINT

test_를 선택합니다.UID+1은 FirstMissingId로, nextid - 1은 LastMissingId로 #tmp로 입력됩니다(테스트 선택).*, 리드(테스트_)UID) 오버(테스트에 의한 순서)UID)를 test_에서 nextid로 지정합니다.@min과 @max 사이의 UID 테스트.여기서 nextid <> test_UID+1 CREATE TABLE #tmp1 (ID INT ) go
declarate @lastmissingid BIGINT, @firstmissingid BIGINT, #tmp open recscan fetch next from @firstmissingid, @@firstmissingid = 0 beginate declarate @maxcnt int = @lastmissingid
@mincnt, int = @firstmissingid 선언

WHIEN @카운터 <= @maxcnt
BEGIN INSERT #tmp1 값(@Counter) SET @Counter += 1 END feach from recscan,@last missingid end close recscan 재스캔 할당 해제

언급URL : https://stackoverflow.com/questions/3826929/sql-query-to-find-missing-rows-between-two-related-tables

반응형