我有两张桌子 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中,我都尝试了内部连接这两个表并获取数据但没有任何工作。
答案 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
有人说给我任何数量少于或者的物品 等于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以获取实体名称。