簡體   English   中英

查找與現有主鍵不匹配的列

[英]Finding columns that do not match existing primary key

我正在嘗試向表中添加外鍵,但數據庫,Sql Server 2005,不喜歡它。

它表示列與現有主鍵或唯一約束不匹配。

如何找到有問題的列,以便刪除/更改它們並添加外鍵?

左鍵連接到相關鍵上的父表,然后檢查子表中左連接父表中的值為空的值。

例如,如果這是您的架構......

table1:
    myKey int primary key,
    ...other columns...

table2:
    otherKey int primary key,
    myKeyFromTable1 int
    ...other columns...

你這樣做:

select distinct
    t2.myKeyFromTable1

from table2 t2

left join table1 t1 on t1.myKey = t2.myKeyFromTable1

where t1.myKey is null

這將為您提供table2中的不同值,這些值在table1沒有對應的父級。

SELECT 
   ForeignKey 
FROM 
   FK_TABLE f 
LEFT JOIN 
   PK_TABLE p ON f.ForeignKey = p.PrimaryKey 
WHERE 
   p.PrimaryKey = NULL

應該這樣做。

ForeignKey =要作為外鍵的列
PK_TABLE =您希望外鍵引用的表
PrimaryKey = ForeignKey列將成為外鍵。

SELECT *
  FROM FK_Table
 WHERE ForeignKey NOT IN (SELECT PrimaryKey FROM PK_Table);

這適用於為單列鍵編寫的。 如果您的DBMS允許使用符號,它也可以用於多列鍵:

SELECT *
  FROM FK_Table
 WHERE (FK_Col1, FK_Col2) NOT IN (SELECT PK_Col1, PK_Col2 FROM PK_Table);

但並非每個DBMS都支持這一點。 具有NOT EXISTS的這個公式應該適用於大多數地方:

SELECT *
  FROM FK_Table
 WHERE NOT EXISTS (SELECT 1
                     FROM PK_Table
                     WHERE FK_Col1 = PK_Col1 AND FK_Col2 = PK_Col2
                  );

所以你有TableA的列X,TableB的列Y.你想讓Y成為一個外鍵,這樣TableB.Y的所有值都是TableA.X中的值,對嗎?

為此,TableA.X需要具有主鍵或唯一約束。 聽起來並非如此。 首先使TableA.X唯一,然后從引用TableA.X的TableB.Y中定義您的FK

暫無
暫無

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

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