當前位置:法律諮詢服務網 - 中國稅務 - SQL中,如何查詢存在壹個表而不在另壹個表中的數據記錄

SQL中,如何查詢存在壹個表而不在另壹個表中的數據記錄

首先,在SQL中(以SQL Server為例),查詢存在壹個表而不在另壹個表中的數據記錄的方法有很多,介紹其中4種:

1、方法壹(僅適用單個字段):使用 not in ,比較容易理解,缺點是效率低

如:select A.ID from A where A.ID not in (select ID from B);

2、方法二(適用多個字段匹配):使用 left join...on... , "B.ID isnull" 表示左連接之後在B.ID 字段為 null的記錄。

如:select A.ID from A left join B on A.ID=B.ID where B.ID is null ;

3、方法三(適用多個字段匹配)

如:select * from B where (select count(1) as num from A where A.ID = B.ID) = 0;

4、方法四(適用多個字段匹配)

如:select * from A where not exists(select 1 from B where A.ID=B.ID)

接著,我們來分析妳的SQL語句為什麽返回數據不準確的原因。

從妳的SQL基礎語句來看,妳使用了方法壹和方法四這兩種,兩種語法本身都是正確的,但是卻沒有達到預期的效果,初步分析,問題可能出在gsdj和swdj這兩張表的qymc字段的判斷比較上。

舉個例子:'企業名稱'和'企業名稱? '這兩個字符串看似相同,實際卻並不相同,因為第二個“企業名稱 ”的後面跟了壹個空格字符。就因為這個空格字符導致這個"'企業名稱'='企業名稱 '"等式不成立。

考慮到妳qymc這個字段的類型是字符型,建議妳在原有sql基礎上做壹個微調如下:

select * from gsdj? gs where not exists (select * from swdj sw where rtrim(ltrim(sw.qymc?))?)=rtrim(ltrim(gs.qymc?)));

其中Ltrim()可以去除左側空格,rtrim()可以去除右側的空格,也就是說我們是對去除空格後的企業名稱進行比較,排除了空格的幹擾。

擴展資料:

在SQL中,對於字符型文本數據,經常需要用到去空格的操作,對ORACLE數據來說可以通過TRIM()函數來簡單實現,而SQL SERVER中並沒有TRIM()函數,只有LTRIM()和RTRIM()兩個函數。

SQL 中使用ltrim()去除左邊空格?,rtrim()去除右邊空格?,沒有同時去除左右空格的函數,要去除所有空格可以用replace(字符串,' ',''),將字符串裏的空格替換為空。?

例:去除空格函數

declare @temp char(50)

set @temp = ' hello sql '

print ltrim(@temp) --去除左邊空格?

print rtrim(@temp) --去除右邊空格?

print replace(@temp,' ','')?--去除字符串裏所有空格?

print @temp

>> 輸出結果?

hello sql?

hello sql

hellosql

hello sql

  • 上一篇:稅務行政工作事項有哪些
  • 下一篇:太行山麓奇特的城堡式村落
  • copyright 2024法律諮詢服務網