2013-03-13 24 views
0

我有一個查詢:空表存在

SELECT g.name, s.hour, gs.weekday 
FROM schedule s 
INNER JOIN group_schedule gs ON gs.schedule_id = s.id 
INNER JOIN groups g ON g.id = gs.group_id 
WHERE EXISTS (
    SELECT * 
    FROM group_schedule 
    WHERE group_id =6 
) 
ORDER BY g.name, gs.weekday 

返回:

name hour  weekday 
A1-A2 10:00:00 1 
A1-A2 17:00:00 1 
A1-A2 10:30:00 1 
A1-A2 17:30:00 1 
A1-A2 18:00:00 2 
A1-A2 11:30:00 2 
A1-A2 18:30:00 2 
A1-A2 11:00:00 2 
A1-A2 12:30:00 3 

但我需要太讓不具備這些組合行,例如:

name hour  weekday 
A1-A2 10:30:00 1 
A1-A2 11:00:00 1 
A1-A2 11:30:00 1 
... 

如果我使用NOT EXISTS,我會獲得一個空表。

+3

它只是我或者是您的初始查詢group_id = 6中唯一的where-clause,我不知道「沒有這些組合」是什麼意思? – 2013-03-13 17:28:16

+0

那麼你計劃不屬於第6組? – 2013-03-13 17:32:20

+0

你的'exists'子句並沒有太多意義。如果你[編輯]你的問題提供一些樣本數據和你想要的結果,你可能會更好。 (請參閱[如何 在堆棧溢出中格式化SQL表 後?](http://meta.stackexchange.com/q/96125)如何添加一些內容。) – 2013-03-13 17:33:37

回答

0

我不知道,但你的意思是這樣的:

SELECT g.name, s.hour, gs.weekday 
FROM schedule s 
INNER JOIN group_schedule gs 
ON gs.schedule_id = s.id AND group_id = 6 
INNER JOIN groups g ON g.id = gs.group_id 
ORDER BY g.name, gs.weekday 

移動GROUP_ID條件出來一般WHERE子句和進入group_schedule加入?你知道在ON關鍵字後面可以有任意的邏輯表達式。

+0

其可能'group_id <> 6'但是通常人們會寫'Where gs.group_id <> 6' – 2013-03-13 17:36:51

+0

非常感謝! Finnaly,我不得不搬出group_id條件,因爲ciritcalfix意味着使用<>運算符,正如Conrad Frix所說的那樣。 'SELECT s.id,s.hour,gs.weekday FROM時間表小號 INNER JOIN group_schedule GS ON gs.schedule_id = s.id AND GROUP_ID <> 6 INNER JOIN基克ON g.id = gs.group_id WHERE EXISTS( SELECT * FROM group_schedule ) ORDER BY gs.weekday,s.hour LIMIT 0,30' – AntonioRomero 2013-03-14 09:27:06