我有一个查询如下:
select q.question, e.filename
from question q
join actions a on a.FK_QId = q.PK_Id
join action_params ap on ap.FK_AId = a.PK_Id
join envfile e on e.FK_Qid = ap.value
where e.EnvType = 0
问题是JOIN ON
子句e.FK_Qid = ap.value
,其中value
是varchar,FK_QId
是integer。我知道我必须对CAST
和CONVERT
做点什么,但我尝试的失败了:
select q.`question`, e.filename
from question q
join actions a on a.FK_QId = q.PK_Id
join action_params ap on ap.FK_AId = a.PK_Id
join envfile e on CAST(e.FK_Qid as nvarchar(3)) = ap.value
where e.EnvType = 0
基本上,value
字段会有像"1"、"2"等字符串。因此,如果我可以进行字符串到字符串的比较或int到int的转换,那也没关系。底线是"1" = 1
和"2" = 2
,依此类推
编辑:CAST(e.FK_Qid as char3) = ap.value
也起作用
如果ap
。value
只有"1"、"2"…等值。。。,然后您可以使用您的第一个查询,服务器将自己进行查询。所有值都将转换为数字,并且您的ON条件将起作用。