不要極至最求一條sql語句搞定一切,可合理拆分爲多條語句sql
Sql 語句中,直接在SELECT
使用@
定義一個變量,如:[@a](https://my.oschina.net/a8856225a)
。express
使用:=
來給變量賦值,:[@a](https://my.oschina.net/a8856225a):=123
,則變量a的值爲123。函數
SELECT @a := id FROM table_a
SELECT @a := 1 FROM table_a
同時定義多個變量,須要在子語句中定義spa
SELECT @a := 1 FROM table_a,(SELECT @b := 2,@c := 3) as rcrcia
例子.net
根據子查詢結果,將主查詢結果進行排序code
# 使用 find_in_set 查詢ID排序位置 select id, find_in_set(id, @rank) `rank` from user, # 聲明定義變量 賦值爲 子查詢結果 結果爲 '3,1,31' (SELECT @rank := (SELECT group_concat(content_id) as content_id FROM `collect_records` WHERE user_id = 1 order by creation_time desc)) as indexRank # 查詢符合子查詢結果的數據 where find_in_set(id, @rank) > 0 # 根據排序值排序 order by `rank`;
if(A,B,C)
表示,若是A
條件成立,那麼執行B,不然執行C排序
@abc := if(2>1,100,200) > @abc = 100
CASE 後面不帶表達式ci
CASE WHEN expression THEN 操做1 WHEN expression THEN 操做2 ....... ELSE 操做n END
CASE 後面帶表達式,此時WHEN 後面的則是該表達式可能的值字符串
CASE expression WHEN 值1 THEN 操做1 WHEN 值2 THEN 操做2 ....... ELSE 操做n END
注:自上而下,凡是走了其中一個when或者是走了else了,其餘的都再也不走了。get
請注意,該函數有拼接字符串最大長度限制。而且,與 limit
不能共存。