sqlserver怎麼查詢一張表中的欄位是否包含在另一張表中某個欄位

2021-04-26 06:16:02 字數 3326 閱讀 4113

1樓:匿名使用者

select distinct b.* from a,b where charindex(a.id,b.id)>0

2樓:感覺壞

沒看出來那兩個表,有沒有兩個表的資料,貼出來大家幫你分析分析啊

sql中,如何查詢存在一個表而不在另一個表中的資料記錄 20

3樓:匿名使用者

首先,在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

4樓:妗妗歘歘

我有兩張表如何查詢在一個表姑在另一個表中的資料

5樓:煙染暖陽

select * from swdj where qymc not in (select qymc from gsdj)

6樓:匿名使用者

select * from gsdj t1 where not exists (select * from swdj where qymc=t1.qymc )

7樓:匿名使用者

select * from gsdj gsdj where gsdj.qymc not in (select swdj.qymc from swdj swdj) 或者

select * from gsdj gs where not exists (select * from swdj sw where sw.qymc=gs.qymc )

試試加上表別名

8樓:丶我是週週

select * from gsdj where gsdj.qymc =swdj.qymc and gsdj.

qymc not in (select swdj.qymc from swdj )這兩個表之間必須要有一個相連線的列

9樓:匿名使用者

select * from gsdj where not exists (select * from swdj where gsdj.qymc=swdj.qymc)

10樓:鎖映僪鶴騫

只需判斷一下即可,根據你的題目意思應該是a表的id和b表的id相關聯。

select *, case when (select count(*) from b where id = a.id)>0 then 1 else 0 end as flag from a如果你是想a表和b表的欄位和id這兩列都一樣,才將flag顯示為1的話,用下面的查詢:

select *, case when (select count(*) from b where id = a.id and 欄位 = a.欄位)>0 then 1 else 0 end as flag from a

sql裡怎麼將一張表的欄位賦值給另一張表?

11樓:匿名使用者

插入資料insert into tbytz(userid) select userid from tbuser更新資料則在tbuser和tbytz兩個表要有一個關係。如tbuser.a1=tbytz.

a2update tbytz set tbytz.userid = (select userid from tbuser where tbuser.a1=tbytz.

a2)結構化查詢語言(英文簡稱:sql)是一種特殊目的的程式語言,是一種資料庫查詢和程式設計語言,用於存取資料以及查詢、更新和管理關聯式資料庫系統;同時也是資料庫指令碼檔案的副檔名。

請幫忙做一張SQL Server的習題,謝謝

是幫你出題還是幫你做題,請寫清楚。sql server 題目 謝謝 幫忙做一下吧 1.create database worker culb 2.use worker culb gocreate table worker 職工號 char 6 primary key,姓名 nvarchar 4 no...

請問sql server中如何把一張表的一列資料按順序插入到另一張表的列中,兩邊的順序需一致

樓上的回答基本正復確,簡單來制寫就是 insert into 表2 列名 select 列名 from 表1 但是你的問題問的不對,兩邊的順序需一致 這說明你資料庫理論沒學過,資料在表裡儲存是以 集合 方式進行儲存的,即沒有順序。這就是說儲存是不按順序的 dbms負責 但顯示可以有順序。即selec...

有一張10元 一張5元 一張2元 一張1元的人民幣,每次拿出

4種。情況分別如下 1 第一種 幣值分別是1 2 5,合計8元 2 第二種 幣值分別是1 2 10,合計13元 3 第三種 幣值分別是1 5 10,合計16元 4 第四種 幣值分別是2 5 10,合計17元 第一種1,2,5,合計8元 第二種1,2,10,合計13元 第三種1,5,10,合計16元 ...