2016-04-15 6 views
0

ここにはテーブルの内容があります。私が達成しようとしている何複数のテーブルを結合するときにNULL値を返す方法

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 |  | 
+------------+------------------+------+-----+---------+-------+ 

は、学生がgrade_eventテーブルの「カテゴリ」の下にクイズ/テストを、逃している表示することです。

ここで私が思いついたことはありますが、何も結果が得られていません。

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; 

私はサブクエリを試行するルートも行っています。

助けてください。

答えて

0

あなたは外側、内側のではなく、参加を使用する必要はありません学生のリストを取得するために参加します学生とイベントのカリキュラム参加を作成した後のイベントの対応するレコード:

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

私はあなただけjoinは、MySQLでinner joinで、left joinしてjoinを置き換えるべきだと思います:http://dev.mysql.com/doc/refman/5.7/en/join.html

そしてgroup by event_idで世話をする、それが正確なgroup by sc.event_idに役立ちます。私はMySQLで知らないが、SQLサーバではうまくいかない。

あなたがいないその値にその値を持つ列を頼むとあなたの2番目のクエリは、必ずしも空である:)

+0

私は提案された変更を加えましたが、まだ空の結果セットを返しています。 サブクエリを使用すると、全体的に意味があります。クエリーするにはどうすればよいでしょうか? –

+0

2つの結合を左結合で置き換えることはできません。たぶんそれはSQL ServerとMySQLの間の相違です、私はあなたのテーブルが作成される方法を理解するようにSQLで動作します。とにかく、@ Shadowは見た目のような解決策を提供しました – BD01

関連する問題