私はSQL開発に不慣れです。だから私はSOから助けを得たいと思います。
私は3つのテーブルを持っています:学生、学生アドレス、学生電話。
それらのスキーマはおおよそ次のとおりです。
student
-------
student_id (Primary Key)
student_name
father_name
mother_name
student_addresses
-----------------
student_address_id (Primary Key)
student_id (Foreign Key)
address
zip_code
student_phones
--------------
student_phone_id (Primary Key)
student_id (Foreign Key)
phone_type
phone_number
student_addressesとstudent_phonesはどちらもhas_many 関係です。そのため、特定のStudent_idの Studentからすべてのフィールドを SELECT したいと思いますが、その Student_id の Student_addresses と student_phonesからの一致するカウント (合計) のみを選択したいと思います。どうすればそれを取得できますか?
このクエリを試しましたが、エラーが返されます:
SELECT students.student_id,student_name,father_name,mother_name,
COUNT(student_addresses.student_id) AS total_addresses,
COUNT(student_phones.student_id) AS total_phones
FROM students,student_phones,student_addresses
WHERE students.student_id = student_phones.student_id AND
students.student_id = student_addresses.student_id AND
students.student_id = 7;
PS:現在、PostgreSQLでこれを使用しています。ただし、MySQL でも動作させたいと考えています。つまり、2 つの異なるクエリが必要ということですか? 私の知る限り、この目的のために、単一のクエリだけが両方で機能します(このクエリ要件に関する限り、MySQL と PostgreSQL の両方が同じ SQL 実装に従っているため)。
GROUP BYを使わずにできるかどうか疑問に思っています。学生テーブルにさらに多くのフィールド (たとえば 12) があると仮定すると、すべてのフィールド名を SELECT と GROUP BY(AFAIK) の両方に配置する必要があり、これは少し洗練されていないように思えます。