1. 程式人生 > >sql中使用""不等於號的誤區

sql中使用""不等於號的誤區

--sql中使用"<>"不等於號的誤區
/*
要求:從一個表(#t2)中找出另一表(#t1)沒有出現過的資料,但是這個表有個聯合主鍵(id和name),
於是我們自然的想到 where  a.id<>b.id and a.name1<>b.name1,這是個誤區,結果並不是我們想象的那樣,
錯誤的解決方案:...
正確的解決方案:...
*/
create table #t1(id int ,name1 int)
create table #t2(id int ,name1 int)

insert into #t1 values(1,1)
insert into #t1 values(2,2)
insert into #t1 values(3,3)

insert into #t2 values(1,1)
insert into #t2 values(2,2)
insert into #t2 values(3,3)
insert into #t2 values(4,4)

select * from #t1 a,#t2 b where  a.id=b.id and a.name1=b.name1

--錯誤的解決方案:...
select * from #t1 a,#t2 b where  a.id<>b.id and a.name1<>b.name1

--正確的解決方案一:先刪除後select
delete #t2 from #t2 b,#t1 a where a.id=b.id and a.name1=b.name1
select * from #t2

--正確的解決方案二:直接select
select * from #t2 b where not exists (select 1 from #t1 a where a.id=b.id and a.name1=b.name1)


--刪除臨時表
drop table #t1
drop table #t2 

相關推薦

Sql 等於''與 NULL

在寫SQL 條件語句是經常用到 不等於‘<>’的篩選條件,此時要注意此條件會將欄位為null的資料也當做滿足不等於的條件而將資料篩選掉。 例:表A A1  B1 1 0 2 1 3 NULL 用 select * from A where B1<>1

sql使用""等於誤區

--sql中使用"<>"不等於號的誤區/*要求:從一個表(#t2)中找出另一表(#t1)沒有出現過的資料,但是這個表有個聯合主鍵(id和name),於是我們自然的想到 where  a.id<>b.id and a.name1<>b.nam

Mappersql語句等於的表示

select * from test where id<>1; 但是mybatis報錯 <> 應該轉義  &lt;&gt;  select * from 

sql語句等於的使用

1、sql 裡 符號<> 於 != 的區別 <> 與!=都是不等於的意思,但是一般都是用<>來程式碼不等於因為<>在任何SQL中都起作用但是!=在sq

在Mybatis處理sql的大於小於

字符替換 mybatis str tab amp 不能 [ ] pos table 因為xml格式中,不能隨便出現"<"、“>”等符號,所以在sql中這一類的符號要進行特殊處理 第一種方法:使用轉義字符替換特殊的符號   例如 SELECT * FROM j

Mybatis的mapper檔案等於的幾種寫法

預期執行SQL效果:select t.name form tablenme t where t.code <> 1; 第一種:轉義 &lt; < (小於) &gt; > (大於) &lt;&gt; <> (

SQL 根據行設定每行資料的排序數值

根據行號自動把當前行號插入到某列中 實現排序 update tempTable set DisplayOrder = right( CAST(rownum as NVARCHAR),5) from( &nb

java 一個等於和兩個等於三個等號的區別?

一個等號是賦值號,兩個等號是判斷號。賦值表示把右邊的值或引用賦給左邊的變數,判斷號表示返回符號兩邊的值是否相等,這裡的值包括引用。相等運算子"==",如果兩個運算元不是同一型別,則會先嚐試轉換型別在進行比較。嚴格相等運算子“==="首先計算其運算元的值,然後比較這兩個值,比較

Oracle sql(+)作用

Oracle  外連線 (1)左外連線 (左邊的表不加限制)        (2)右外連線(右邊的表不加限制)        (3)全外連線(左右兩表都不加限制)      外連線(Outer Join) outer join則會返回每個滿足第一個(頂端)輸入與第

mysql等於過濾null的問題

在寫SQL 條件語句是經常用到 不等於‘!=’的篩選條件,此時要注意此條件會將欄位為null的資料也當做滿足不等於的條件而將資料篩選掉。例:表AA1 B110213NULL用 select * from A where B1 != 1查詢時得到的結果為:A1B110第三列 B

MyBatis mapper.xmlSQL處理小於與大於 和小於等於

class lsp adding style eight mybatis family height app 我們只需作如下替換即可避免上述的錯誤: < <= > >= & ‘ " &lt; &lt;= &

sql 2008 能創建數據庫關系圖

.html 數據庫名 數據庫關系圖 不能 sql 2008 數據 sina ati data 執行以下命令: ALTER AUTHORIZATION ON DATABASE::[databasename] TO sa [databasename] 為數據庫名; 此方法借鑒於

如何解決JavaScript0.1+0.2等於0.3

幫我 console 解決 如何解決 進制 範圍 無限 scrip 接下來    console.log(0.1+0.2===0.3)// true or false??   在正常的數學邏輯思維中,0.1+0.2=0.3這個邏輯是正確的,但是在JavaScr

篩選出sql 查詢結果 包含某個字符

title www. char kdt nbsp ofo pos ali ati select * from table1 where patindex(‘%關鍵字%‘ , aa) = 0 select * from table1 where charindex(‘關鍵字

SQL NOT IN 查詢到數據

運算符 clas 參與 http ogr nbsp gpo 應該 pic 一、問題 用以下sql語句查詢數據,結果為空 SELECT a.ID , a.Sub_Project_Name , a.Sub_Project_Type

oracle數據庫有數據,通過pl/sql查詢到,用sqlplus能查到,PL/SQL developer會對數據進行本地緩存

新增 不出 BE product 連接 進入 java myba In 這幾天遇到了兩個問題,都很奇葩,苦惱了三天,最終還是定位出來了。 問題一、通過pl/sql developer插入數據到遠程oracle數據庫服務器,通過pl/sql developer查詢能查詢到數據

c++的if語句的110為什麽等於110?

分享圖片 圖片 直接 image 表達 == 代碼 else png 從上圖可以看出,當表達式1.1*x被直接放進if的判斷括號中時1.1*x不等於y,但是將1.1*x賦值給z時,z與y相等,這是為什麽?(以下為不等價時的代碼) #include<stdi

SQL資料庫刪除一個表在另一個表存在的記錄

SQL資料庫中刪除一個表在另一個表中不存在的記錄 刪除log表中 不存在的 goods商品資料 ①.我先查詢出了不同的資料(測試) SELECT goods_id FROM `ecs_cangku_log` WHERE `goods_id` NOT IN ( SELECT go

實戰c++的vector系列--vector的遍歷(stl演算法、vector迭代器(不要在迴圈判斷等於end())、operator[])【轉】

(轉自:https://blog.csdn.net/wangshubo1989/article/details/50374914?utm_source=blogxgwz29) 遍歷一個vector容器有很多種方法,使用起來也是仁者見仁。 通過索引遍歷: for (i = 0; i<

plsql developer如何設定sql window顯示行

  plsql developer中如何設定sql window顯示行號 2017年07月10日 17:50:15 Alan_ZhQ 閱讀數:4531 標籤: plsql developer 更多 個人分類: plsq