簡體   English   中英

SQL Server中表之間的參照完整性

[英]Referential integrity between tables in SQL Server

在此處輸入圖片說明

我有2個表格, MembersEnrollments 可以使用主鍵Member ID來連接兩個表。

我需要編寫一個查詢,該查詢返回Members表中的所有成員,而Enrollments表中沒有相應的行,反之亦然。

這是我到目前為止的內容:

IF OBJECT_ID('tempdb..#memberswithoutenrollments') IS NOT NULL
    DROP TABLE #memberswithoutenrollments 

SELECT m.* 
INTO #memberswithoutenrollments 
FROM ABC_Members m 
LEFT OUTER JOIN ABC_MemEnrollment e ON m.MemberID = MemberID

FULL JOIN是比較兩個表之間的列表的一種簡單方法:

SELECT COALESCE(e.MemberID, m.MemberID),
       (CASE WHEN e.MemberID IS NULL THEN 'No Enrollments' ELSE 'No Member' END)
FROM ABC_Members m FULL JOIN
     ABC_MemEnrollment e
     ON m.MemberID = e.MemberID
WHERE e.MemberID IS NULL OR m.MemberID IS NULL;

但是,如果您具有適當的外鍵關系,那么在沒有成員的情況下永遠不要注冊。

您可以NOT IN這里使用NOT IN以使您受益。

WITH
    -- Create a list of all of the matches
    in_table AS
        (
            SELECT
                Member_ID
            FROM
                Enrollments
            WHERE
                Members.MemberID = Enrollments.Member_ID
        ),

    result_table AS
        (
            SELECT
                *

            FROM
                Members

            -- Grab only the values from members that DO NOT APPEAR in in_table
            WHERE
                MemberID NOT IN (SELECT DISTINCT FROM in_table)
        )

-- Grab all results
SELECT * FROM result_table

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM