A表
Path
1_2_3_4
1_2
2_3
3_4
1_4
1_5
B表
ID
2
3
4求一条SQL,查找在A表Path字段中存在B表ID的记录
我自己写了一条,但失败了
SELECT *
FROM A
WHERE (
SELECT CHARINDEX(B.ID, A.Path)
FROM B
) > 0
子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。请问应该如何实现

解决方案 »

  1.   

    SELECT * FROM TA A,TB B WHERE CHARINDEX(B.ID, A.Path)>0
      

  2.   

    SELECT *
    FROM A AS t
    WHERE EXISTS(SELECT * 
                 FROM B
                 WHERE CHARINDEX('_'+RTRIM(ID)+'_','_'+t.path+'_')>0)
      

  3.   

    select * from A c where exists(select 1 from b where charindex(ltrim(id),c.Path)>0)
      

  4.   

    SELECT * 
    FROM A 
    WHERE exists

      select 1
     from B
      where charindex(B.ID, A.Path) > 0

      

  5.   

    --這樣?
    DECLARE @A TABLE(Path VARCHAR(10)) 
    INSERT @A SELECT '1_2_3_4' 
    INSERT @A SELECT '1_2' 
    INSERT @A SELECT '2_3' 
    INSERT @A SELECT '3_4' 
    INSERT @A SELECT '1_4' 
    INSERT @A SELECT '1_5' 
    DECLARE @B  TABLE(ID INT) 
    INSERT @B SELECT 2 
    INSERT @B SELECT 3 
    INSERT @B SELECT 4 
    SELECT DISTINCT A.* FROM @A A INNER JOIN @B B ON  CHARINDEX(LTRIM(B.ID), A.Path)>0
    /*Path       
    ---------- 
    1_2
    1_2_3_4
    1_4
    2_3
    3_4*/
      

  6.   

    select Path from A,B where charindex(B.ID,A.Path)>0
    这样就可以了吧?
      

  7.   

    select * from A
    where exists(select 1 from B where charindex('_'+rtrim(ID)+'_','_'+A.path+'_')>0)
      

  8.   

    select * from A where exists(select 1 from b where charindex(ltrim(id),A.Path)>0)