2017-12-26 102 views
6

2 tablodan veri göstermek istiyorum ve eşleşme olmayan veriler de dahil olmak üzere hepsini göstermek istiyorum. Bu sorgu ile denedim.Eşleşmeyen tüm verileri göstermek için mysql içinde JOIN nasıl kullanılır

SELECT * FROM student s 
LEFT JOIN grade g ON g.student_id=s.student_id 
WHERE s.student_id = 9 

Ben sadece herhangi bir notu yok bile ben tüm öğrencileri gösteriyor ihtiyaç ne ise derecesine sahip öğrenciler gösteriyor olsun ne. Ayrıca inner join, right join kullanmayı denedim, ancak sonuç aynı. Sorgu ne olmalı?

+0

örnek veri tablosunu ekleyin ??? –

cevap

7

sol tabloda (öğrenciler tablo) dan un eşleştirme satırlar, s.student_id eşit boş değer çünkü sorun, WHERE s.student_id = 9 ve boş 9 veya hatta bir şey eşit değildir çünkü fıkra null student_id değerlerle bu satırları kaldırmak nerede bu .

deneyin wherejoin durumuna geçmek için:

SELECT * 
FROM student s 
LEFT JOIN grade g ON g.student_id=s.student_id AND s.student_id = 9; 

Veya NOT IN kullanın:

SELECT * 
FROM student s 
WHERE s.student_id = 9 
    AND student_id NOT IN(SELECT student_id 
         from grade 
         where student_id is not null); 
+0

İlki bir numaradır. Çok teşekkürler. – Abaij

1

ben fıkra çalıştığını JOIN SQL nasıl yanlış düşünüyorum söylemek kadarıyla. Eğer durum böyle değilse, o zaman bu tabloların içinde ne olduğunu ve neleri görüntülemeniz gerektiğine dair daha fazla bilgiye ihtiyacımız olacak.

Sorgunuzda geçerli: AÇIK öğrencinin s

SOLUNA dereceli g JOIN GELEN

SEÇ * g.student_id = s.student_id

s.student_id = 9

İhtiyacınız olan şey:

bakıyorum da sorgu istiyor Ne herhangi notu

sahip olmasa bile tüm öğrencileri gösteriyor gerekenler:

"9'a kadar kendi kimliğine sahip öğrencilerin eşit ilgili tüm verileri seçin hem Öğrenciler hem de Not tabloları "

Burada sorulması gereken ilk soru: Not Tablosundan veriye ihtiyacınız var mı?

Evet ise o zaman senin fıkra sorundur ve

(daha sonra DEĞİL IN yan tümcesi içeren @Brittain Ze cevabını kontrol) Kimlik = 9 değil, aynı zamanda başkalarıyla sadece öğrencileri almak istemeyebilirsiniz NEREDE

Değilse (ve neye ihtiyacınız olduğunu söyledikten sonra) o zaman SELECT * FROM Student WHERE student_id = 9 işi yapmalıdır. Notları hakkında bilgi vermeden tüm öğrenciler hakkında bilgi alacaksınız.

İlgili konular