2011-12-23 110 views
2

我試圖從兩個不同的表中引用兩個主鍵,但問題在於它們由於其字符長度而不匹配。例如,person.personid = '1234'department.personid = '12345'如何匹配兩個不同主鍵長度的表

是否有一條SQL語句可用於匹配主鍵的前4或5個字符,或者是否有其他任何可以使用的方法。


更新:我真誠的道歉。我正在處理兩個表格。 "dyndomrun.ddid"帶有主鍵,"domainregion.domainid"沒有任何主鍵也沒有外鍵。 「dyndomrun」表DDL設置爲"character varying"並且具有8個字符,而「domainregion」表DDL也設置爲「字符變化」但具有10個字符。

問題:domainregion表中有一些字段需要與dyndomrun表中的主鍵連接在一起。我似乎不能用簡單的SQL語句來做到這一點,如下面

SELECT domainregion.domainid, dyndomrun.ddid 
FROM domainregion, dyndomrun 
WHERE domainregion.domainid = dyndomrun.ddid 
ORDER BY domainregion.domainid, dyndomrun.ddid; 

我曾嘗試連接,內部連接,LIKE,沒有人似乎工作。我正在處理的數據庫純粹是使用PostgreSQL存儲的基於SQL的數據庫。

請指教。

+2

什麼數據庫引擎? MySQL的? SQL Server?甲骨文?其他? – ean5533 2011-12-23 15:37:54

+1

我將創建一個映射表,其中列p_person_id和d_person_id – 2011-12-23 15:39:42

+2

通常,您不匹配表之間的主鍵 - 一個表的**外鍵**引用另一個表的**主鍵** - 並且這兩者需要相同在他們的數據類型 – 2011-12-23 15:39:49

回答

1

你的問題就沒有意義了。我們不會將一個表的主鍵映射到另一個表的主鍵。

現在我們將依賴表的外鍵映射到被引用表的主鍵。但是這種情況下兩個表中列的值必須匹配。 DEPARTMENT.PERSONID中的12345必須參考PERSON.PERSONID中的記錄12345,因爲.PERSON.PERSONID中的1234字面上是不同的人。

也許你正在使用一個怪異的數據模型,其中依賴表有一些智能鍵,其中只有部分引用了父鍵。如果是這樣,我的哀悼。但是您需要提供一些具體的細節,以及DBMS風格的一些指示(因爲解決方案會因不同的產品而異)。

但你最大的問題是這樣的:一旦你嘗試在比你運行DEPARTMENT.PERSONID 1234在DEPARTMENT.PERSONID,12345在.PERSON.PERSONID匹配1234的風險列之間的平等以外的任何其他適用關係完整性和DEPARTMENT.PERSONID中的123456。這可能不是你想要的。

1

您是不是要找像

select * 
    from t1 
    , t2 
where to_char(t1.id) = substr(t2.id,1,4) 

或者其他的方式:

select * 
    from t1 
    , t2 
where t1.id = round(t2.id/10) 

上述兩個解決方案假定t1.id是一個字符比t2.id短。

HTH

+0

我的問題是,我需要從特定的表中選擇一個字段列表,他們也被稱爲另一個表中的主鍵,只是在主鍵中使用不同的字符集。主鍵類型是「字符變化」,因此它聲明瞭這個錯誤「沒有函數匹配給定的名稱和參數類型,您可能需要添加顯式類型轉換」。 – Jeiman 2011-12-26 12:59:03

1

嘗試......

SELECT * 
    FROM person 
INNER JOIN department ON person.personid = LEFT(department.personid,4)