SQL query two tables with relation one-to-many

怎甘沉沦 提交于 2020-01-04 02:27:05

问题


I have two tables A and Band the relation between A to B is A--->one-to-Many--->B

Normally i have one record of B for every record of A.

I am trying to write a query which would give me list of ONLY records of A which have more than ONE(MULTIPLE) record(s) in B.

I am very confused as I have only done basic sql queries and this one seems complex to me.

Could some one please guide me to correct answer or give me the solution.

edited:

ok i tried something like below and it gave me an error

SELECT SOME_COLUMN_NAME FROM A a, B b WHERE a.ID=b.ID and count(b.SOME_OTHER_COLUMN_NAME)>1;

ORA-00934: group function is not allowed here

I tried to search on the internet ad i am not allowed to use grouping in where clause and should go by using having. I am stuck here now.


回答1:


You haven't specified which database system you are using (sql-server/mysql/sqlite/oracle etc) so this is a generic answer.

In this form, list out all the columns of A explicitly in the SELECT and GROUP BY clauses. It normally generates a good straightforward plan in most DBMS. But it can also fail miserably if the type is not GROUP-able, such as TEXT columns in SQL Server.

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

This other form using a subquery works for any column types in A and normally produces exactly the same plan.

SELECT A.Col1, A.Col2, A.Col3
FROM A
WHERE 1 < (
    SELECT COUNT(*)
    FROM B
    WHERE A.LinkID = B.LinkID)



回答2:


You could do it with a sub-query:

select *
  from A
  where ( select count(*) from B where B.id = A.id ) > 1



回答3:


select * 
from tableA 
where Id in (select IdA from tableb group by idA having COUNT(*)>1)

assuming tableB has a field called idA that links it to tableA



来源:https://stackoverflow.com/questions/9420475/sql-query-two-tables-with-relation-one-to-many

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!