本帖最后由 panxiaosen 于 2011-04-02 14:46:04 编辑

解决方案 »

  1.   

    ClientIp in @ClientIp 
    这样能行吗?
      

  2.   

    SELECT UserID FROM UserTable a,(SELECT ClientIp FROM LoginTable WHERE USERID=1234) b WHERE a.ClientIp =b.ClientIp
    UNION ALL
    SELECT UserID FROM UserTable1 a (SELECT ClientIp FROM LoginTable WHERE USERID=1234) b WHERE a.ClientIp =b.ClientIp
    UNION ALL
    SELECT UserID FROM UserTable2 a (SELECT ClientIp FROM LoginTable WHERE USERID=1234) b WHERE a.ClientIp =b.ClientIp
    UNION ALL
    SELECT UserID FROM UserTable3 a (SELECT ClientIp FROM LoginTable WHERE USERID=1234) b WHERE a.ClientIp =b.ClientIp
    UNION ALL
    SELECT UserID FROM UserTable4 a (SELECT ClientIp FROM LoginTable WHERE USERID=1234) b WHERE a.ClientIp =b.ClientIp
      

  3.   

    嗯..不好意思,为了简洁,我只是写了个大概DECLARE @ClientIp VARCHAR(max)
    SELECT @ClientIp =@ClientIp + QUOTENAME(ClientIp,'''')+'',''FROM LoginTable WHERE USERID=1234
    SELECT @ClientIp='('+SUBSTRING(@ClientIp,1,LEN(@ClientIp)-1)+')'--把所有的IP地址都拼接成一个字符串,然后动态执行SQL 
    DECLARE @SQL NVARCHAR(MAX)SELECT @SQL=
    'SELECT UserID FROM UserTable WHERE ClientIp in ' +@ClientIp +
    'UNION ALL '
    'SELECT UserID FROM UserTable1 WHERE ClientIp in '+ @ClientIp +
    'UNION ALL '
    'SELECT UserID FROM UserTable2 WHERE ClientIp in '+ @ClientIp + 
    'UNION ALL '
    'SELECT UserID FROM UserTable3 WHERE ClientIp in ' + @ClientIp+  
    'UNION ALL '
    'SELECT UserID FROM UserTable4 WHERE ClientIp in '+  @ClientIp
      

  4.   

    没看仔细,in后是子查询,in的开销已经有点大,如果表多的话用第二种吧!字符串比子查询性能会有优化的。
      

  5.   


    谢谢.. 如果SELECT ClientIp FROM LoginTable WHERE USERID=1234查出来的结果放到一个临时表里,
    然后按下面的代码会不会好点??
    SELECT UserID FROM UserTable WHERE ClientIp in (SELECT ClientIp FROM 临时表)
    UNION ALL
    SELECT UserID FROM UserTable1 WHERE ClientIp in (SELECT ClientIp FROM 临时表)
      

  6.   

    如果LoginTable不是很大的话,都查不错。第二种方法楼主的方法行不通,得用到exec执行才行。
      

  7.   

    放到临时表就可以这样,效果更好
    SELECT UserID FROM UserTable , 临时表 WHERE UserTable.ClientIp=临时表.ClientIp