sql資料庫如何從兩張不同的表中,篩選出不同的欄位,如A表中

2021-05-28 05:11:06 字數 3402 閱讀 8022

1樓:匿名使用者

若有相關聯的欄位的話,用內連線

select a,b,c,d from 表 inner join 另外一張表 on 條件 = 條件

2樓:胤漱璺

select a,b,c,d from a表,b表 where 表a和表b關聯欄位;

3樓:

有關聯欄位:

select a,b,c,d from 表 inner join 另外一張表版 on 條件權 = 條件

沒有關聯欄位:

select a,b from 表

union all

select c,d from 另外一張表

4樓:匿名使用者

select a.c,a.d,b.a,b.b,b.gfrom a,b

where a.a = b.a(+)

and a.b = b.b(+)或者來

select a.c,a.d,b.a,b.b,b.gfrom a,b

where a.a (+)= b.a

and a.b (+)= b.b加號源

位置要看哪個為主表

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

5樓:匿名使用者

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

6樓:妗妗歘歘

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

7樓:煙染暖陽

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

8樓:匿名使用者

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

9樓:匿名使用者

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 )

試試加上表別名

10樓:丶我是週週

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

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

11樓:匿名使用者

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

12樓:鎖映僪鶴騫

只需判斷一下即可,根據你的題目意思應該是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中如何在建立資料庫的同時建立表

暈,加個use 資料庫名不就完事了嗎 create database test gouse test create table dbo users id int not null name varchar 32 collate chinese prc ci as not null passwd bi...

資料庫的兩個問題1SQL降序排列的表如何拿

select from select number row number over order by grade desc from students m where number 2 delete from select number row number over order by grade ...

請問下C如何將SQL資料庫中的整個表繫結到DataGridView控制元件中

region binddata private void binddata endregion 一樓的 你肯定是看不懂,你在頁面上加一個資料庫控制元件,加一個datagridview控制元件,設定一下資料庫控制元件連線資料庫,然後設定一下datagridview控制元件的資料來源為剛才你設定的那個資...