SQL查询两个关系一对多的表

时间:2012-02-23 20:11:48

标签: sql one-to-many

我有两个表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子句中使用分组,应该使用。我现在被困在这里。

3 个答案:

答案 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

相关问题