2012-10-26 29 views
0

如何在具有特定鏈接值但未具有相同值的列上連接兩個表?以不同(但已連接)的值在柱面上連接兩個表

例如,我需要加入tbl1tbl2,其中tbl1.col=100tbl2.col=200。唯一的聯繫是我/我的公司。

有沒有辦法鏈接沒有顯式共享值的行?我需要山坳值「100」的所有行是在同一行所有tbl2的列有山坳價值200

+0

你能澄清你的問題來定義「連接」的含義嗎?兩個表之間是否有共同的外鍵? –

+0

不,表格沒有明確的公用密鑰。他們有我知道的鏈接,但沒有存儲在表格中。我知道這很愚蠢,但我沒有選擇修復它,只能用它來工作。 – eatonphil

+1

給出一個簡單的例子,顯示兩個表(列名和幾行),然後顯示一個例子說明你想要做什麼。 – BellevueBob

回答

2

有沒有辦法鏈接沒有明確的共享值的行?

。您可以編寫自定義的JOIN以自行關聯數據。

您沒有指定特定的DBMS,因此以下示例包含通用SQL。

SELECT * FROM tbl1, tbl2 WHERE tbl1.col = 100 AND tbl12.col = 200 

或者,更動態:

SELECT * FROM tbl1, tbl2 WHERE tbl1.col + 100 = tbl12.col; 
-- with JOIN 
SELECT * FROM tbl1 JOIN tbl2 ON (tbl1.col + 100) = tbl12.col; 
3

你可以把一些邏輯在連接謂詞,如:

select * 
from tbl1 as a 
    join tbl2 as b on a.col + 100 = b.col 
2
select 
    * 
from 
    tbl1 
    inner join 
    tbl2 
    on tbl1.col = 100 and tbl2.col = 200 

很奇怪,但它會工作

1

如果我正確理解你的問題,你有邏輯上相互關聯的,但表中的當前鍵沒有兩個表(但你必須將它們放在一起的商業規則)。我認爲你需要創建一個映射關係的交叉引用表。交叉引用表將每個其他表的主鍵映射到一起以顯示數據之間的邏輯關係。

我認爲所有其他的海報都假設這種關係是可以計算的關係,但我不認爲這就是你所要求的。如我錯了請糾正我。

+0

對,我無法計算出價值。有沒有辦法做到這一點,而不創建一個交叉引用表?這可能超出我的權限來創建類似的東西。 – eatonphil

+0

您嘗試查詢多少條記錄?和其他海報一樣,您可以在應用程序中的JOIN或WHERE子句中創建自定義謂詞。這種情況的主要缺點是對於大型查詢來說效率非常低。我會確保創建一個交叉引用表不是一個選項,因爲這是您正在嘗試執行的最佳設計。否則,您將不得不在使用數據庫的應用程序中創建自定義的WHERE子句或JOIN條件。 –