2016-04-15 20 views
0

, tabloların içeriği buradadır.Birden çok tabloya katılırken NULL değerleri nasıl döndürür

mysql> desc student; 
+------------+------------------+------+-----+---------+----------------+ 
| Field  | Type    | Null | Key | Default | Extra   | 
+------------+------------------+------+-----+---------+----------------+ 
| name  | varchar(20)  | NO |  | NULL |    | 
| sex  | enum('F','M') | NO |  | NULL |    | 
| student_id | int(10) unsigned | NO | PRI | NULL | auto_increment | 
+------------+------------------+------+-----+---------+----------------+ 

mysql> desc grade_event; 
+----------+------------------+------+-----+---------+----------------+ 
| Field | Type    | Null | Key | Default | Extra   | 
+----------+------------------+------+-----+---------+----------------+ 
| date  | date    | NO |  | NULL |    | 
| category | enum('T','Q') | NO |  | NULL |    | 
| event_id | int(10) unsigned | NO | PRI | NULL | auto_increment | 
+----------+------------------+------+-----+---------+----------------+ 

mysql> desc score; 
+------------+------------------+------+-----+---------+-------+ 
| Field  | Type    | Null | Key | Default | Extra | 
+------------+------------------+------+-----+---------+-------+ 
| student_id | int(10) unsigned | NO | PRI | NULL |  | 
| event_id | int(10) unsigned | NO | PRI | NULL |  | 
| score  | int(11)   | NO |  | NULL |  | 
+------------+------------------+------+-----+---------+-------+ 

Neyi başarmaya çalışıyorum öğrencilerin grade_event tablosundaki 'kategorisinde' altında bulunan bir test/testi, cevapsız hangi göstermektir.

İşte ben neye vardım ama hiçbir sonuç üretmiyorum;

select name, category, sc.event_id 
from student s 
join score sc on s.student_id=sc.student_id 
join grade_event ge on sc.event_id=ge.event_id 
where score is NULL 
group by name, event_id; 

Ayrıca bir alt sorgunun yapılma yoluna gittim;

select name, category, sc.event_id 
from student s 
join score sc on s.student_id=sc.student_id 
join grade_event ge on sc.event_id=ge.event_id 
where score not in (select score from score) 
group by name, event_id; 

Herhangi bir yardım için teşekkür ederiz. Bu kesin group by sc.event_id için yararlı olabilir http://dev.mysql.com/doc/refman/5.7/en/join.html

Ve group by event_id ile ilgilenir:

cevap

0

kendi değerlerini değil sahip bir sütun sormak yerine bir iç ait katılmak gerekmez öğrencilerin listesini almak için katıldıkça

Kişisel ikinci sorgu mutlaka boş Ben önerilen değişiklikler yaptı

select name, category, ge.event_id 
from (student s 
join grade_event ge) --no join condition creates a carthesian join 
left join score sc on s.student_id=sc.student_id and sc.event_id=ge.event_id 
where sc.score is NULL 
1

Ben sadece senin joinleft join tarafından, join MySQL bir inner join olduğunu yerini gerektiğini düşünüyorum. MySQL bilmiyorum ama sql sunucusunda işe yaramaz. Eğer sen bir dış kullanmak gerekir değerlerini :)

+0

, ama yine de sonuçların boş kümesi iade ediyorum: bir carthesian oluşturduktan sonra olaylarda karşılık gelen rekor öğrenci ve olayların katılmak. Alt sorgu ile, bu tamamen anlamlıdır. Sorgulamanın daha iyi bir yolu ne olurdu? –

+0

İki birleştirmeyi soldan birleştirmek işe yaramıyor mu? Belki sql server ve MySQL arasındaki farklar, tablolarınızın nasıl oluşturulduğunu anladığımdan sqlde çalışır. Her neyse, @Shadow göründüğü bir çalışma çözümü sağladı – BD01

İlgili konular