表a:
id       shi
4 沈阳,长春,厦门
5 长沙,宁波,长春
9 杭州,上海
表b:
sheng     shi
福建 泉州
福建 南平
福建 厦门
福建 三明
福建 龙岩
福建 福州
福建 莆田
福建 漳州
福建 宁德
比如我知道是福建,想在a表里找出
5 长沙,宁波,长春
9 杭州,上海
这两条,如果时浙江想得到
4        沈阳,长春,厦门
请问SQL怎么写

解决方案 »

  1.   

    表设计有问题SELECT A.* FROM A
    LEFT JOIN B
    ON ',' + A.SHI + ',' NOT LIKE '%,' + B.SHI + ',%'
    AND B.SHENG = '福建'
    WHERE B.SHI IS NULL
      

  2.   

    SELECT A.* FROM A
    LEFT JOIN B
    ON ',' + A.SHI + ',' LIKE '%,' + B.SHI + ',%'
    AND B.SHENG = '福建'
    WHERE B.SHI IS NULLSELECT A.* FROM A
    LEFT JOIN B
    ON ',' + A.SHI + ',' LIKE '%,' + B.SHI + ',%'
    AND B.SHENG = '浙江'
    WHERE B.SHI IS NULL
      

  3.   

    没看懂楼主的问题。
    就目前的数据来看,表a,b没有直接关联项,不知道怎么解。猜测楼主意图,感觉这两个表可以这么设计:
    A(城市):
    ID 城市 省份
    1  沈阳 1
    2  长沙 2
    3  杭州 3B(省份):
    ID 省份
    1  辽宁
    2  湖南
    3  浙江最后要选择省的城市的时候可以如下:
    declare @result varchar(100) = ''
            @省份名字 = '辽宁'
    select @result = @result + 城市 + ', '
    from A
    inner join A on A.省份 = B.ID
    AND B.省份 = @省份名字
      

  4.   


    create table tab_a
    (id int, shi varchar(50))insert into tab_a
    select 4, '沈阳,长春,厦门' union all
    select 5, '长沙,宁波,长春' union all
    select 9, '杭州,上海'create table tab_b
    (sheng varchar(20), shi varchar(20))insert into tab_b
    select '福建', '泉州' union all
    select '福建', '南平' union all
    select '福建', '厦门' union all
    select '福建', '三明' union all
    select '福建', '龙岩' union all
    select '福建', '福州' union all
    select '福建', '莆田' union all
    select '福建', '漳州' union all
    select '福建', '宁德' union all
    select '浙江', '宁波' union all
    select '浙江', '杭州'
    -- 测试1,输入'福建'
    select c.* 
    from tab_a c
    inner join
    (select t.id from
    (select a.id,charindex(b.shi,a.shi) lc
    from tab_a a cross join tab_b b 
    where b.sheng='福建') t
    group by t.id having sum(t.lc)=0) d
    on c.id=d.id/*
    id          shi
    ----------- --------------------------------------------------
    5           长沙,宁波,长春
    9           杭州,上海(2 row(s) affected)
    */
    -- 测试2,输入'浙江'
    select c.* 
    from tab_a c
    inner join
    (select t.id from
    (select a.id,charindex(b.shi,a.shi) lc
    from tab_a a cross join tab_b b 
    where b.sheng='浙江') t
    group by t.id having sum(t.lc)=0) d
    on c.id=d.id/*
    id          shi
    ----------- --------------------------------------------------
    4           沈阳,长春,厦门(1 row(s) affected)
    */