SQL基礎(1)----union和like的合用出現的問題

有2張表:
A
id 1   name 1a
id 2   name 2a
id 3   name 3a
id 4   name 4a
id 5   name 5a

B
id 1   name 1b
id 2   name 2b
id 3   name 3b
id 4   name 4b
id 5   name 5b

現在把A、B表的數據聯合起來再篩選出想要的。
1)、查出字段name中不包含'a'字符的數據。
select * a
union
select * b
where name not like '%a%'
看似上面的寫法不錯,其實結果是錯誤的,查出的結果是a、b表的所有數據,並不是想得到的結果。但把第一個SELECT的表名和第二個表名換個位置,就是希望的結果。
select * b
union
select * a
where name not like '%a%'

通過這樣的結果分析出,每次在like查找之前都已經把地一個表的數據查出來了,並沒有對第一個表進行篩選,所以導致上面2次查詢結果不一樣。
正確的SQL語句寫法是:
select * from
(
select * a
union
select * b          
) as #temp
where name not like '%a%'
這樣結果纔是最正確。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章