0

我有两张桌子

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-b 我已经尝试内部连接这两个表并获取数据,但没有任何效果。

4

3 回答 3

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
    
于 2013-01-24T13:03:05.480 回答
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
于 2013-01-24T13:05:01.087 回答
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 集由过滤器表 B 中的 id 组成,它们只有 1 个过滤器。

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

于 2013-01-24T13:57:24.590 回答