2013-06-24 32 views
0

我有一個像下面在條款,給予錯誤,同時通過字符串值整數列

select * from table1 where id in (select ids from table2 where id = 100) 

子查詢返回我喜歡輸出如果34,35,55,66單獨我運行查詢。

但我上面的查詢提供了錯誤的

Conversion failed when converting the varchar value '34,35,55,56' to data type int. 

table1中的id列是int類型。我知道我可以在2個單獨的查詢中做到這一點,但如果在單個查詢中有任何方法,請讓我知道。 非常感謝提前

+1

請不要在一列中存儲多個值。這是一個真正的痛苦,就像你的情況。你應該改變你的數據庫結構。 –

+0

@juergend不,我不能改變它的現有數據庫。 – DevelopmentIsMyPassion

+0

即使現有的數據庫也可以更改...即使您必須更改一些內容,也請考慮這樣做。 –

回答

1

我不知道關於sql服務器和關於這種結構的意見是不受歡迎的,儘管如此,你可以在mysql中使用以下內容來完成,每個this fiddle

select distinct id from table1 join table2 on find_in_set(id,ids)

更新:我剛剛意識到這不會有它自己的id場和制約基礎上,搜索反映table2。如果你需要幫助修改查詢以適應讓我知道,我會更新它和小提琴。

更新2:這是一個蹩腳但可能有效的嘗試,在SQL Server中使用它的更多有限的字符串工具來完成此操作,根據此fiddle。如果有人知道更簡單的find_in_set SQL Server的等價物,我很想知道它是什麼。

select distinct id from table1 join table2 
    on patindex('%,'+cast(id as varchar)+',%',ids)>0 or 
    patindex(cast(id as varchar)+',%',ids)>0 or 
    patindex('%,'+cast(id as varchar),ids)>0 or 
    patindex(cast(id as varchar),ids)>0 
+1

不,我不知道如何將其轉換爲sql server – DevelopmentIsMyPassion

+0

看起來像你可以使用http://msdn.microsoft.com/en-us/library/ms188395.aspx代替'find_in_set' –

+0

是否有可能爲您將此轉換爲SQL? – DevelopmentIsMyPassion