近期注意到新版 MySQL 中使用 SELECT 語(yǔ)句時(shí),括號(hào)的用法出現(xiàn)了一些變化,早期版本中常見的使用子查詢時(shí)需要使用括號(hào)包起來(lái),如:
SELECT *
FROM table_a
WHERE column_a IN (
SELECT column_b
FROM table_b
)
但在新版 MySQL 中,上述語(yǔ)句在執(zhí)行時(shí)會(huì)報(bào)語(yǔ)法錯(cuò)誤。經(jīng)過(guò)查詢資料發(fā)現(xiàn),括號(hào)的使用確實(shí)在新版 MySQL 中做了一些修改。
在官方文檔中,對(duì)于括號(hào)的使用,有如下說(shuō)明:
Subqueries in the WHERE clause were introduced in MySQL 4.1. Prior to 4.1, subqueries in the FROM clause were also not supported. MySQL 4.1 has introduced subqueries that can appear in the FROM clause. The optimizer is able to handle only a few queries that use this feature, and it is not yet mature. We recommend that you not use subqueries in the FROM clause until the optimizer is more mature.
也就是說(shuō),MySQL 4.1 之前并未支持在 WHERE 子句中使用子查詢,而是要使用括號(hào)來(lái)將子查詢括起來(lái)。但在 MySQL 4.1 及其之后的版本中,已經(jīng)可以在 WHERE 子句中直接使用子查詢了,因此之前使用括號(hào)將子查詢括起來(lái)的做法不再適用。
以前的代碼需改為:
SELECT *
FROM table_a
WHERE column_a IN
SELECT column_b
FROM table_b
如果改為這樣,就可以避免因括號(hào)使用不當(dāng)而導(dǎo)致的錯(cuò)誤了。