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列有两个id就像这个6,12时,我得到以下错误。显然,工作时,记录t2.id(nvarchar)只有一个。我怎样才能使它与两个/多个一起工作?
错误:
Conversion failed when converting the nvarchar value '6,12' to data type int.
答案 0 :(得分:0)
错误可能是因为table1.song_name_id
和table2.id
具有不同的数据类型。请确保它们属于同一类型或使用convert
功能。
答案 1 :(得分:0)
不要将CSV数据存储在您的表中,但下面给出了一个临时解决方案。
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 = '..'
如果table2 id列包含两个以逗号分隔的值,则应处理不同的方法。
答案 2 :(得分:0)
正如Bishakh Ghosh所说,你真的应该加入相同类型的领域,而且Coder1991也说,你真的不应该在一个字段中存储逗号分隔值。
鉴于该字段处于该状态,您可以使用pattern matching来查找t2.id是否包含t1.song_name_id中的值。
在下面的例子中,额外的逗号将允许" 6,12"成为",6,12,"和声明中的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 = '..'