mysql中的union小坑

今天在使用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的理解不夠深入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章