2017-02-03 69 views
1

我想執行內部聯接桌子上,基於它的值,如:SQL JOIN表2 ON table2.value在(table1.value)

SELECT table2.value FROM table1 
INNER JOIN table2 ON table2.key IN (table1.value) 
WHERE table1.key = 'test' 

東西用在()不是工作時, 「在(table1.value)」 不被解釋爲 「中( '1', '2')」,它不顯示出任何效果。

表1:

KEY VALUE 
test '1','2' 

表2:

KEY VALUE 
1  result1 
2  result2 
3  result3 

我知道有這樣的解決辦法,但我想解決這個問題而無需額外的SELECT ...

SELECT * FROM table2 WHERE table2.value in (SELECT value FROM table1 WHERE key = 'test') 

任何想法? 謝謝, Lennart

+0

你必須使用一個子查詢 – Hemal

+2

我有一個想法!不要在table1中存儲你的值。每個值都有一個記錄。這個設計本質上是有缺陷的。 –

回答

4

首先,你的數據結構是完全錯誤的。您不應該將字符串列表存儲在一個字符串中。有很多很好的理由:

  • SQL沒有很好的字符串處理函數。
  • 您不應該將整數存儲爲字符串。
  • 你應該聲明正確的外鍵關係。
  • 您的查詢無法利用索引或分區。

對於每個鍵和每個值,正確的解決方案是一行。

但是,有時候,我們被其他人的設計決定搞得很糟糕。在這種情況下,你可以使用like

SELECT table2.value 
FROM table1 t1 INNER JOIN 
    table2 t2 
    ON t1.value LIKE '%''' + t2.key + '''%' 
WHERE t1.key = 'test'; 
+0

謝謝!不知道LIKE能夠解決它。 – lka42

相關問題