2017-07-06 11 views
0

對SQL來說很陌生。如何在2個表格之間進行正確的JOIN邏輯

我有2個表格,我需要在它們之間創建適當的連接。表:表1和表2。 表1包含以下列:域,實例,項目和上載。 表2包含以下列:域,實例,項目派生,上傳和ID。

最終我想將Table2中的ID列帶入Table1。但是,項目和項目派生不完全匹配。相反,項目的價值將在Project Derivation中找到。

我的想法是這樣的:

Table1.Domain=Table2.Domain 
Table1.Instance=Table2.Domain 
Table1.Upload=Table2.Upload 

Table1.Project是Table2.Project推導

任何幫助將不勝感激。


表1
Table1


表2
Table2

+1

我們可以查看這些表的一些數據嗎? –

+1

發佈你的表格結構 – Rahul

+0

也許這會幫助你理解,如果你沒有調用表格table1和table2,而是告訴我們真實的名字,那麼我們就會明白它們實際上包含了什麼。 –

回答

0

的加入將包括LIKE,以便比較

WHERE 'Cloud, Cloud - Config' LIKE '%Cloud - Con%' 

查詢:

SELECT * 
FROM t1 
JOIN t2 ON t2.domain = t1.domain 
     AND t2.instance = t1.instance 
     AND t2.project_derivation like '%' || t1.project || '%'; 

但是,你也找一個叫'Bet''Plan'項目時,發現一個項目'Better Plans'條目。這是因爲你的桌子設計不好。您沒有正確使用關係數據庫系統。如果字符串的某些部分對您的查詢感興趣,則分別存儲這些部分。

不知道你的數據,我建議你的情況下有一個project_derivation表包含一個記錄每個項目推導連同相關的項目。那麼你將不再對子串感興趣,而只是在這張表中找到從項目派生到項目的鏈接。

數據庫設計中可能存在更多缺陷。爲什麼兩個表共享域和實例?一個項目是否僅在這兩個項目中有意義(例如,Google.com/Dev可能會有一個項目Audit,而Ebay.com/Dev會有另一個同名項目)?這可能沒問題,然後你會有一個複合鍵,但也許你只是冗餘地存儲數據。

相關問題