![](/img/trans.png)
[英]The columns in table *** do not match an existing primary key or UNIQUE constraint
[英]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.