6

SQLについて、一見単純な質問がありますが、理解するのに苦労しています。次のテーブルがあるとします。

company: 
    company_id
    company_title

users: 
    user_id
    username

company_owners: 
    company_id
    user_id

現在、会社の所有者として複数のユーザーがいる可能性があります。データの例を次に示します。

company:
1, "A Company"
2, "B Company"
3, "C Company"

users:
1, "A User"
2, "B User"
3, "C User"

company_owners:
1,1
1,2
1,3
2,3

特定の会社の所有者に基づいて、company_titleと、その会社の所有者の数を取得するクエリ(MySQL)を作成しようとしています。したがって、たとえば:

クエリの例(英語)の実行:「Cユーザー」が所有者である各会社の所有者の数を取得します。

company_id=1, company_title="A Company", num_owners=3
company_id=2, company_title="B Company", num_owners=1
company_id=3, company_title="C Company", num_owners=0

私が試してみました:

SELECT COUNT(user_id), company.* FROM `company` 
LEFT JOIN `company_owners` ON company_owners.company_id = company.company_id 
WHERE company_owners.user_id=1 GROUP BY company_id

ただし、所有権番号は常に「1」になります。これは、user_id=1の行のみをカウントしているためだと思います。

誰かアイデアはありますか?必要に応じて詳細をお知らせします。

本当にありがとう!

4

2 に答える 2

8

WHERE句は、「user_id=1のこの会社の所有者が存在する場所」である必要があります。

SELECT COUNT(user_id), company.*
FROM `company` 
LEFT JOIN `company_owners`
ON company_owners.company_id = company.company_id 
WHERE EXISTS
(
    SELECT *
    FROM company_owners AS co2
    WHERE company_owners.company_id = co2.company_id
    AND co2.user_id = 3
)
GROUP BY company_id

オンラインで動作することを確認してください:sqlfiddle

于 2012-07-02T23:02:45.570 に答える
1
select company.company_id, company_title, count(*)
from company join company_owners on company.company_id = company_owners.company_id
where exists (select 1 from company_owners co where co.user_id = 1 and co.company_id = company.company_id)
group by company.company_id, company_title
于 2012-07-02T23:02:55.397 に答える