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

  • Apple&Tech Reviews & Giveaways

    Apple&Tech R

    12 Temmuz 2008
  • LevelUpTuts

    LevelUpTuts

    20 Ocak 2012
  • The10HourMan

    The10HourMan

    28 EYLÜL 2012

İLGİLİ SORU / CEVAPLAR