读书人

查询疑问解决方法

发布时间: 2012-06-03 16:59:40 作者: rapoo

查询疑问
执行以下语句1:

SQL code
SELECT EM007 FROM [EAPS].[dbo].APSEMP WHERE EM001 = 'hs'

得到结果:
SQL code
'加工中心1','加工中心2','加工中心3'



执行以下语句2:
SQL code
SELECT        [JO002]      ,[JO003]FROM [EAPS].[dbo].[APSJOB]whereJO015 IN ('加工中心1','加工中心2','加工中心3')

可以查询出数据

执行以下语句3:
SQL code
SELECT        [JO002]      ,[JO003]FROM     [EAPS].[dbo].[APSJOB]whereJO015 IN (SELECT EM007 FROM [EAPS].[dbo].APSEMP WHERE EM001 = 'hs')

结果为空

想请教下原因



[解决办法]
SELECT EM007 FROM [EAPS].[dbo].APSEMP WHERE EM001 = 'hs'

--取出来的数据是 '加工中心1','加工中心2','加工中心3' 这个作为一个完整的字符串用in 肯定是不行的。

SQL code
declare @sql nvarchar(4000)set @sql = 'SELECT        [JO002]      ,[JO003]FROM  [EAPS].[dbo].[APSJOB]whereJO015 IN ('+SELECT EM007 FROM [EAPS].[dbo].APSEMP WHERE EM001 = 'hs'+')'exec(@sql)
[解决办法]
SQL code
DECLARE @STR VARCHAR(200)SET @STR=''EXEC('SELECT @STR=EM007 FROM [EAPS].[dbo].APSEMP WHERE EM001 = ''''hs'''''SELECT        [JO002]      ,[JO003]FROM     [EAPS].[dbo].[APSJOB]whereJO015 IN ('+@STR+')'
[解决办法]
SQL code
SELECT [JO002],       [JO003]FROM   [EAPS].[dbo].[APSJOB] TAWHERE  EXISTS (           SELECT 1           FROM   [EAPS].[dbo].APSEMP TB           WHERE  TB.EM001 = 'hs'                  AND TA.J0015 = TB.EM007       )
[解决办法]
SQL code
DECLARE @STR VARCHAR(200)SET @STR=''SELECT @STR=EM007 FROM [EAPS].[dbo].APSEMP WHERE EM001 = 'hs'EXEC('SELECT        [JO002]      ,[JO003]FROM     [EAPS].[dbo].[APSJOB]whereJO015 IN ('+@STR+')' 

读书人网 >SQL Server

热点推荐