2009-07-25 47 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 2009-07-25 17:29:14

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 

也许不完全是最快的:)

托马斯Kopczuk

+0

你真的应该使用一个连接,而不是选择子。 – thedz 2009-07-25 17:25:48

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 2009-07-25 17:38:28