2016-04-01 74 views
0

我試圖使用NOT運營商與ALL但它應該SQL不能與所有運營商

我跟着以下不比較:

的TableX包含例如:

+------+------+ 
| id | name | 
+------+------+ 
| 6 | a | 
| 7 | b | 
| 8 | c | 
| 9 | d | 
| 10 | e | 
+------+------+ 
5 rows in set (0.04 sec) 

and tabley contains:

+------+------+ 
| id | name | 
+------+------+ 
| 4 | a | 
| 5 | b | 
| 7 | c | 
| 8 | d | 
+------+------+ 
4 rows in set (0.03 sec) 

我用過:

SELECT id, name FROM tablex WHERE NOT id < ALL (SELECT id FROM tabley); 

回報:

+------+------+ 
| id | name | 
+------+------+ 
| 6 | a | 
| 7 | b | 
| 8 | c | 
| 9 | d | 
| 10 | e | 
+------+------+ 
5 rows in set (0.00 sec) 

問題是不是在某些情況下,這些「tabley」的返回值越低, 它是使用操作>的解決方案非常合乎邏輯的,但是這是什麼有關?

回答

2

如果您使用的<操作,好像你要確保id比子查詢的最小id小。因此,要表達的是在SQL:

SELECT id, name FROM tablex WHERE NOT id < (SELECT min(id) FROM tabley) 

或者,周圍的否定翻轉:

SELECT id, name FROM tablex WHERE id >= (SELECT min(id) FROM tabley) 
+0

確定,但一個例子: SELECT id, name FROM tablex WHERE NOT id < ANY (SELECT id FROM tabley); 回報: +------+------+ | id | name | +------+------+ | 8 | c | | 9 | d | | 10 | e | +------+------+ 3 rows in set (0.11 sec) 爲什麼作品有 '任意',但沒有'ALL'? – nikomaster

+0

@nikomaster也許這可能有助於說明:http://stackoverflow.com/a/2298576/139010 –

+0

而這:_「必須遵循比較運算符的單詞'ALL'的意思是」返回TRUE',如果比較對於子查詢返回的列中的值「ALL」爲「TRUE」。「」_dev.mysql.com/doc/refman/5.7/en/all-subqueries.html –