我有两个表A和Band A到B之间的关系是A --->一对多---> B
通常我对A的每条记录都有一条B记录。
我正在尝试编写一个查询,该查询会为我提供A ONLY 的记录列表,其中B的记录超过 ONE(MULTIPLE)记录 < / p>
我很困惑,因为我只做了基本的SQL查询,这个对我来说似乎很复杂。
有人可以指导我正确回答或给我解决方案。
编辑:
好吧我尝试了类似下面的内容,它给了我一个错误
选择SOME_COLUMN_NAME FROM a a,B b WHERE a.ID = b.ID and count(b.SOME_OTHER_COLUMN_NAME)&gt; 1;
ORA-00934:此处不允许使用群组功能
我试图在互联网上搜索广告我不允许在where子句中使用分组,应该使用。我现在被困在这里。
答案 0 :(得分:4)
您尚未指定使用的数据库系统(sql-server / mysql / sqlite / oracle等),因此这是一般性答案。
在此表单中,在SELECT和GROUP BY子句中明确列出A的所有列。它通常在大多数DBMS中生成一个很好的直接计划。但是如果类型不支持GROUP,它也可能失败,例如SQL Server中的TEXT列。
SELECT A.Col1, A.Col2, A.Col3
FROM A
JOIN B ON A.LinkID = B.LinkID
GROUP BY A.Col1, A.Col2, A.Col3
HAVING COUNT(*) > 1
使用子查询的另一种形式适用于A中的任何列类型,通常生成完全相同的计划。
SELECT A.Col1, A.Col2, A.Col3
FROM A
WHERE 1 < (
SELECT COUNT(*)
FROM B
WHERE A.LinkID = B.LinkID)
答案 1 :(得分:0)
您可以使用子查询执行此操作:
select *
from A
where ( select count(*) from B where B.id = A.id ) > 1
答案 2 :(得分:0)
select *
from tableA
where Id in (select IdA from tableb group by idA having COUNT(*)>1)
假设tableB有一个名为idA的字段,将其链接到tableA