我有两个表A和Band,A与B之间的关系是A —>一对多—> B
通常,对于A的每条记录,我都有一个B的记录。
我正在尝试编写一个查询,该查询将为我提供A的 唯一 记录列表,其中B中的 记录 超过 一个(多个) 。
我很困惑,因为我只完成了基本的sql查询,而这对我来说似乎很复杂。
可以请一个人指导我正确答案或给我解决方案。
编辑:
好吧,我尝试了下面的事情,它给了我一个错误
从A a,B b中选择SOME_COLUMN_NAME a.ID = b.ID并计数(b.SOME_OTHER_COLUMN_NAME)> 1;
ORA-00934:此处不允许使用组功能
我试图在互联网广告上进行搜索,但我不允许在where子句中使用分组,而应该通过使用hading进行搜索。我现在被困在这里。
您尚未指定正在使用哪个数据库系统(sql-server / mysql / sqlite / oracle等),因此这是一个通用答案。
以这种形式,在SELECT和GROUPBY子句中显式列出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)