SQL - VS yiyor
İki tablo var:
1. Lecturers (LectID, Fname, Lname, degree).
2. Lecturers_Specialization (LectID, Expertise).
En Uzmanlaşma ile Öğretim Görevlisi bulmak istiyorum. Bu çalıştığımda çalışmıyor:
SELECT L.LectID,Fname,Lname
FROM Lecturers L,Lecturers_Specialization S
WHERE L.LectID=S.LectID and COUNT(S.Expertise)>=ALL
(SELECT COUNT(Expertise) FROM Lecturers_Specialization GROUP BY LectID);
Ama bu deneyin, çalışır:
SELECT L.LectID,Fname,Lname
FROM Lecturers L,Lecturers_Specialization S
WHERE L.LectID=S.LectID
GROUP BY L.LectID,Fname,Lname
HAVING COUNT(S.Expertise)>=ALL
(SELECT COUNT(Expertise) FROM Lecturers_Specialization GROUP BY LectID);
Sebebi nedir? Teşekkürler.
CEVAP
7* *fıkra bir şartla tanıttıtek satır; HAVING
tanıtır bir koşul tümcesitoplamalardanyani tek bir sonuç, say, ortalama gibi, min nerede seçim sonuçları, max ve sum, üretilmiştirbirden fazlasatır. Sorgunuza HAVING
düzgün çalışır dolayısıyla durumu (bir toplama bir durum yani) ikinci bir tür için çağırır.
Genel bir kural olarak, WHERE
GROUP BY
GROUP BY
*sonra 12* önce kullanın. Oldukça ilkel bir kuraldır, ama vakaların �'dan fazla yararlıdır.
Bunu yaparken, yeniden yazmak sorgunuza birleşim: ANSI sürümü kullanarak isteyebilirsiniz
SELECT L.LectID, Fname, Lname
FROM Lecturers L
JOIN Lecturers_Specialization S ON L.LectID=S.LectID
GROUP BY L.LectID, Fname, Lname
HAVING COUNT(S.Expertise)>=ALL
(SELECT COUNT(Expertise) FROM Lecturers_Specialization GROUP BY LectID)
Bu bir olarak kullanılan WHERE
ortadan kaldıracaktırbirleştirme koşulu teta.