2017-02-03 11 views
1
私はインナーを実行したい

はこのように、それの価値観に基づいて、テーブルの上に参加してtable2.value ON table2ののJOINワーキング、 "(table1.value)では" "( '1' '2')で" と解釈されていない、それがどんな結果を表示しません。SQL(table1.value)

TABLE1:

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

まず、あなたのデータ構造は単に間違っています。文字列にIDのリストを格納すべきではありません。多くの正当な理由があります。

  • SQLには文字列処理機能がありません。
  • 整数を文字列として格納しないでください。
  • 適切な外部キーの関係を宣言する必要があります。
  • クエリではインデックスやパーティションを利用できません。

正しい解決策は、キーと値ごとに1行です。

しかし、時には、私たちは他の人の本当に悪い設計決定に固執しています。その場合、あなたはlikeを使用することができます。

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

ありがとう! LIKEがそれを解決できることを知らなかった。 – lka42

関連する問題