我是 SQL 开发的新手。所以我想从SO那里得到一些帮助。
我有三个表:student、student_addresses、student_phones。
他们的架构大致如下:
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中为特定的student_id选择所有字段,但仅从 student_addresses 和student_phones中为该student_id选择匹配的计数(总数) 。我怎么得到那个?
我试过这个查询,但它返回一个错误:
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 上使用它。那么这是否意味着我需要有两个不同的查询?AFAIK,为此,只需一个查询就可以在两者上工作(因为 MySQL 和 PostgreSQL 都遵循相同的 SQL 实现,就这个查询要求而言)。
我想知道,如果我不使用 GROUP BY 就可以做到这一点。因为,假设学生表有更多字段,比如 12,那么我将不得不将所有字段名称都放入 SELECT 和 GROUP BY(AFAIK),这似乎有点不雅。