2009-07-25 31 views
0

にないショーの結果:MySQLのクエリ - 私はこのようなクエリを持っている別のテーブル

SELECT lesson.id, p1.first_name, p1.surname, start_time, instrument.name 
FROM lesson, person AS p1, person AS p2, instrument, invoice_lesson 
WHERE lesson.student = p1.id 
AND lesson.teacher = p2.id 
AND instrument.id = lesson.instrument_id 
ORDER BY surname 

lesson.idがテーブルinvoice_lesson.lesson_idでない場合、それは結果のみを示したように、しかし、私はそれを修正したいと思います。相関クエリですか?これはどうすればいいですか?

答えて

4
あなたが外でこれを行うことができ

が参加されない可能性があります

SELECT lesson.id, p1.first_name, p1.surname, start_time, instrument.name 
FROM lesson l JOIN person p1 ON l.student = p1.id 
JOIN person p2 ON l.teacher = p2.id 
JOIN instrument i ON i.id = l.instrument_id 
LEFT JOIN invoice_lesson il ON l.id = il.lesson_id 
WHERE il.lesson_id IS NULL 
ORDER BY surname 

このアプローチは、相関サブクエリアプローチよりもはるかに高速です。

+0

最初の行は別名に一致するように変更する必要があります;)thx – Robert

0

最も簡単な方法:

SELECT lesson.id, p1.first_name, p1.surname, start_time, instrument.name 
FROM lesson, person AS p1, person AS p2, instrument, invoice_lesson 
WHERE lesson.student = p1.id 
AND lesson.teacher = p2.id 
AND instrument.id = lesson.instrument_id 
AND lesson.id NOT IN (SELECT lesson_id FROM invoice_lesson) 
ORDER BY surname 

正確に最速の1 :)

トマシュKopczuk

+0

。 – thedz

0

使用してみてくださいJOIN:あなたは本当にむしろ選択サブよりも、ジョインを使用する必要があります

SELECT lesson.id, p1.first_name, p1.surname, start_time, instrument.name 
FROM lesson, person AS p1, person AS p2, instrument, invoice_lesson 
JOIN invoice_lesson 
ON lession.id = invoice_lession.lesson_id 
WHERE lesson.student = p1.id 
AND lesson.teacher = p2.id 
AND instrument.id = lesson.instrument_id 
ORDER BY surname 
+0

構文エラーまたはアクセス違反:1066ユニークでないテーブル/エイリアス: 'invoice_lesson' – Robert

関連する問題