SQL查询的两个与关系表一个一对多
我有两个表A和波段B A之间的关系是A --->一对许多--->乙SQL查询的两个与关系表一个一对多
通常情况下,我有对于A的每个记录B的一个记录
我想编写一个查询,这将使我的ONLY记录的其中有超过ONE(多)结果名单B.
我很困惑,因为我只做了基本的SQL查询,这对我来说似乎很复杂。
有人请指导我正确的答案或给我的解决方案。
编辑:
确定我想是这样的下方,它给我一个错误
SELECT SOME_COLUMN_NAME从一个,B b,其中a.ID = b.ID和计数(b.SOME_OTHER_COLUMN_NAME)> 1;
ORA-00934:组函数是不是在这里
我试图在互联网上的广告搜索允许我不允许使用WHERE子句中的分组,并应通过使用具有去。我现在被困在这里。
的数据库系统使用的是(SQL服务器/ MySQL的/ SQLite的/ ORACLE等)您还没有指定,所以这是一个通用的答案。
在这种形式中,在SELECT和GROUP BY子句中明确列出A的所有列。它通常在大多数数据库管理系统中生成一个很好的直接计划。但是如果类型不是GROUP-able,它也可能失败,比如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)
你可以用一个子查询做到这一点:
select *
from A
where (select count(*) from B where B.id = A.id) > 1
这是可行的,但是你并不想就这样做在生产系统中使用大表。您在A中的每一行都有效地执行了子选择。 – 2012-02-23 20:27:39
select *
from tableA
where Id in (select IdA from tableb group by idA having COUNT(*)>1)
假设tableB的有一个叫做艾达场,它链接到TABLEA
这在技术上是正确的,但是如果您在A中有很多列,它会变得非常混乱。如果您在结果中需要A中的所有列,那是只需按ID列进行分组,然后将A与子查询结合使用即可。 – 2012-02-23 20:21:54