我是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:我編輯了這個問題。謝謝。 –