2013-09-16 27 views
0

對不起,標題是如此混亂,下面是我的表(示例)和我想要實現的。MySQL SELECT all除了兩列有特定數據在一起

uid | title  | comment  | duration | timestamp 
--------------------------------------------------------- 
1 | test  | test   | d   | 2013-09-15 12:00:00 
2 | test  | test   | w   | 2013-09-15 12:00:00 
3 | test  | test   | m   | 2013-09-30 12:00:00 
4 | test  | test   | y   | 2013-12-31 12:00:00 
5 | test  | test   | d   | 2013-09-16 12:00:00 

基本上我需要除非duration = d和時間戳= 2013-09-15 12:00:00在一起選擇查詢*從這個表。因此,應該從搜索結果中排除的唯一記錄是第1行。

我需要什麼似乎很簡單,我相信我失去了一些東西,但我有一個真正艱難的時間與它...

所有幫助非常感謝。

+1

選擇任何答案,不要忘了';' – zaquest

+0

@zaquest什麼? – superphonic

+1

這兩個答案在末尾都沒有分號,這是MySQL – zaquest

回答

3
select * 
from table 
where not (duration = 'd' AND timestamp = '2013-09-15 12:00:00'); 
+0

或者,如果您想使用de Morgan:'where duration <>'d'OR timestamp <>'2013-09-15 12:00:00''。根據您的索引,可能會比另一個更快。 (只要持續時間<> d,它可以在不檢查時間戳的情況下返回該行) – Konerak

+0

我更喜歡「NOT(... AND ...)」而不是「NOT ... OR NOT ...」,因爲它更容易理解(至少對我而言)。我的Teradata優化器無論如何都在重寫:-) – dnoeth

3

嘗試:

SELECT * 
FROM yourTable 
WHERE duration != 'd' OR timestamp != '2013-09-15 12:00:00'; 

Fiddle

+0

這是不需要分號的,因爲排除了所有具有該日期的數據和所有具有該持續時間的數據。例如,運行該查詢不會返回第5行,但它需要。 – superphonic

+0

這是正確的。使用AND要求兩個條件都是正確的。 –

+0

運行此查詢從結果中排除第5行。我剛剛運行它,它不返回第5行。 – superphonic