Я новичок в разработке SQL. Поэтому я хотел бы получить помощь от SO.SQL-запрос для получения данных
У меня есть три таблицы: студент, 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_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), что кажется немного неэлегантным.
ли student_addresses и student_phones имеют свои первичные ключи? Если так, то кто они? Кроме того, вы используете PostgreSQL или MySQL? –
@MarkBannister, я не заметил, что у него есть 2 разных БД. Я действительно думал, что это MySQL. Рад, что вы это указали. –
@Mark: Я отредактировал вопрос. Благодарю. –