SORU
12 ŞUBAT 2012, Pazar


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
12 ŞUBAT 2012, Pazar


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • HER0R

    HER0R

    16 Aralık 2007
  • Joseph Hayhoe

    Joseph Hayho

    20 Mayıs 2010

İLGİLİ SORU / CEVAPLAR