combativeAlpaca:
私はちょうど道を尋ねますので、一般的な方法でこの質問をするかどうかは全くわからないので、その私に提示されて。2つの関連テーブルは以下のとおりです。
Manager (
ID: integer,
LoginID: varchar(16),
Name: varchar(64),
Password: varchar(8),
Birthday: date,
Address: varchar(128),
Email: varchar(32),
PhoneNumber: char(10)
)
ManagerCertificate (
ManagerID: integer, -- Foreign key: ManagerID references Manager(ID)
CertificateId: integer,
Certificate: blob
)
正確に3つの異なる証明書を持っているすべての管理者の名前と電子メールを表示します。
私はいくつかのことを試してみたが、私は失敗し続けます。私は多分、ネストされたサブクエリ、カウント演算子を使用しています...
select M.Name, M.Email
from Manager M, ManagerCertificate MC
??? where MC.ManagerID = M.ID ???
私は正しい方向に指摘されるように探しています。私はこれを複雑オーバーかもしれません。
感謝
ニック:
A JOIN
とは、COUNT
管理者の名前と電子メールでのグループ化とチェック(使用して、これを行うための一つの方法であるHAVING
マネージャーは正確に3つの異なる証明書を持っていること)。)MySQLは<5.7がM.ID上のグループにあなたを許すだろうが、それはそれ以降のバージョンになりますまだ仕事書き込みクエリに好適であることに注意してください。また、その明示的な注意JOIN
(と構文ON
節)は古いスタイルのコンマに参加することが好ましいです。
SELECT M.Name, M.Email
FROM Manager M
JOIN ManagerCertificate MC ON MC.ManagerID = M.ID
GROUP BY M.Name, M.Email
HAVING COUNT(DISTINCT MC.CertificateId) = 3