2016-12-26 44 views
0

我有兩個表:通過另一個表列值選擇列

表A

id | name 

表B

id | hash | owners_id 

owners_id包含來自表的ID A.

實施例:

表A

id | name 
1 | James 
2 | Jonas 

表B

id | hash | owners_id 
1 | j28sj | 1,2 

期望結果:

James | j28sj 
Jonas | j28sj 

由於都包含ownerds_id

我試圖做一個查詢,選擇表A的所有名稱A的同夥與表B owners_id列。

+0

什麼類型是owners_id?它是一個數組還是逗號分隔的字符串? – nrlakin

+0

逗號分隔的字符串 –

+0

立即嘗試;我編輯了一個逗號分隔字符串的答案,並提供了一個工作小提琴。 – nrlakin

回答

0
SELECT 
    A.name, 
    B.hash 

FROM 
    A 
left JOIN B ON 
    B.owners_id LIKE CONCAT('%', A.id, '%') 

注意:你所設計的數據庫設計不當,它可能不能工作,你喜歡owners_id。所以1,11,111要麼你需要單獨的表與許多關係或把前導零像001,011,111

0

有幾種方法可以做到這一點。如果您想將owner_id保留爲以逗號分隔的字符串,則會有點混亂。您需要將字符串第一解析成整數的列表,以形成連接條件:

SELECT A.name, B.hash FROM A 
LEFT JOIN B 
ON find_in_set(A.id,B.owners_id) <> 0; 

您可能要考慮讓owners_id是一個整數外鍵表A,如果你可以改變你的架構。

這裏的工作SQL小提琴: http://sqlfiddle.com/#!9/320477/4

+0

它沒有工作.. /: –

+0

@TiagoCastro立即嘗試;我在第一個答案中誤解了模式。 – nrlakin

相關問題