获取两个表的并集并获取具有条件的数据

时间:2013-01-24 12:59:39

标签: sql-server

我有两张桌子 table-a

id   name
100    asd
101    ass
102    gdd
103    hgf
104    cvd
105    erf

表-B

id     filter
100     red
101     blue
100     green
100     yellow
102     black
102     red
103     dark

表-a是主表,并且具有所有id。但表2是具有“过滤器”数据的表。 从这两个表我想找出所有那些没有最少2个过滤器的id。 请注意,table-b没有table-a中的所有itemnumber,并且我想要所有那些itemnumber,无论是在table-a还是table-bI中,我都尝试了内部连接这两个表并获取数据但没有任何工作。

3 个答案:

答案 0 :(得分:2)

Select A.ID, A.Name, count(*)
from tableA A
LEFT JOIN tableB B on A.ID = B.ID
Group By A.ID, A.name
having count(*) <= 1
  • LEFT JOIN给出A中的所有记录,只有B中匹配的记录。
  • 按ID和名称分组,让我们计算找到的过滤器数量 每个
  • 有人说给我任何数量少于或者的物品 等于1.(或小于最小值2)

    结果就是这样。

    101 ass 1
    103 hgf 1
    104 cvd 0 
    105 erf 0
    

答案 1 :(得分:0)

select
    *
from
    table-a a
    left join (
        select id, count(id) as c from table-b group by id
    ) v on a.id = v.id
where isnull(v.id, 0) < 2

答案 2 :(得分:0)

我认为这可以在SQL Server中运行(在SQLite中测试,通常这两者在内联视图语法方面相当兼容)。但是除了语法问题之外,内联视图可以更容易地使用集合进行可视化。

    select TA.id, name 
    from  TA  
    inner join
    (     

     select id from TA
     where not exists (select id from TB where TA.id = TB.id)       

     UNION         

     select id from TB
     group by id having count(filter) < 2         

    )  as FOO
   on TA.id = FOO.id

UNION的默认行为是删除重复项。

第一个UNIONed集合由表A中的id组成,它们没有过滤器(过滤器表B中没有对应物)。

第二个UNIONed集包含过滤表中的ID,表B只有1个过滤器。

我们将这些联合集合连接回表A以获取实体名称。