2017-05-22 3 views
0
SELECT t1.*, t2.name as song_name 
FROM table1 as t1 
INNER JOIN table2 as t2 
ON t1.song_name_id = t2.id 
WHERE t1.id = '..' 

t2.idの列にこの6,12のような2つのIDがあると、次のエラーが発生します。明らかに、レコードt2.id(nvarchar)が1つのみであるときに動作します。どのように2 /複数で動作させることができますか?複数の値を結合する方法

エラー:table1.song_name_idtable2.idは、異なるデータ型を持っているので、

Conversion failed when converting the nvarchar value '6,12' to data type int. 
+1

テーブルにCSVデータを保存しないでください。可能であればレコードごとに1つのID。 –

答えて

0

エラーはおそらくあります。それらが同じタイプであることを確認するか、convert機能を使用してください。

0

テーブルにCSVデータを保存しないでください。ただし、一時的な解決方法を以下に示します。表2 ID欄は、コンマで区切られた2つの以上の値が含まれている場合

SELECT t1.*, t2.name as song_name 
FROM table1 as t1 
INNER JOIN table2 as t2 
ON (t1.song_name_id = left(t2.id,1)) 
or(t1.song_name_id = right(t2.id,1)) 
WHERE t1.id = '..' 

異なるアプローチが扱わなければなりません。

0

Bishakh Ghoshが言及したように、あなたは実際に同じタイプのフィールドに加わるべきですし、Coder1991によると、カンマ区切りの値を1つのフィールドに格納しないでください。

フィールドがある状態では、pattern matchingを使用して、t2.idにt1.song_name_idの値が含まれているかどうかを調べることができます。

次の例では、カンマを追加すると、「6,12」が「、6,12」になり、like文のsong_name_idが「%、6、%」になります。 。

SELECT 
    t1.*, 
    t2.name as song_name 
FROM 
    table1 as t1 
INNER JOIN table2 as t2 ON 
    ',' + t2.id + ',' LIKE '%,' + CONVERT(VARCHAR(20),t1.song_name_id) + ',%' 
WHERE 
    t1.id = '..' 
関連する問題