小编典典

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

sql

我有两个表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进行搜索。我现在被困在这里。


阅读 269

收藏
2021-04-28

共1个答案

小编典典

您尚未指定正在使用哪个数据库系统(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)
2021-04-28