今天在使用union時,遇到一個小小的坑
業務情景如下,需要從表中查詢出對應數據同時,還需要將當前表的最大id給查詢出來,使用的SQL如下
SELECT
id
FROM
chat_session
WHERE
`from` = $from_id
AND `to` = $to_id
AND workbench_id = $workbench_id
AND type = $type UNION
SELECT
max( id )
FROM
chat_session
注:其中的 $from_id都是變量,語句本身看起來很簡單,就是將條件查詢的結果最後再union上一個固定的最大值,但是這裏有一個問題,當這個根據條件查詢出來的id本身就是最大值時,將會使查詢出來的結果只有一條,這與我本來預期的兩個一模一樣的結果是衝突的。當時爲了解決這個問題,我的解決方法如下就是將查詢出來的最大值加上一,就可以保證條件查詢的結果不與union的結果不一樣
SELECT
id
FROM
chat_session
WHERE
`from` = $from_id
AND `to` = $to_id
AND workbench_id = $workbench_id
AND type = $type UNION
SELECT
(max( id ) + 1 )
FROM
chat_session
總的來說,還是對union的理解不夠深入。