明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

如何查詢2個(gè)表中同一字段的不同數(shù)據(jù)值

[摘要]怎樣查詢兩個(gè)表中同一字段的不同數(shù)據(jù)值例如:A表中的字段a有40000條數(shù)據(jù)B表中的字段a有60000條數(shù)據(jù),其中的40000條數(shù)據(jù)跟A表是一樣的怎樣能把那不一樣的20000條數(shù)據(jù)查詢出來(lái)啊?--建表table1,table2: create table table1(id int,...
怎樣查詢兩個(gè)表中同一字段的不同數(shù)據(jù)值

例如:

A表中的字段a有40000條數(shù)據(jù)
B表中的字段a有60000條數(shù)據(jù),其中的40000條數(shù)據(jù)跟A表是一樣的
怎樣能把那不一樣的20000條數(shù)據(jù)查詢出來(lái)?

--建表table1,table2:

create   table   table1(id   int,name   varchar(10));   
create   table   table2(id   int,score   int);   
insert   into   table1   select   '1','lee';
insert   into   table1   select   '2','zhang';
insert   into   table1   select   '3','steve';
insert   into   table1   select   '4','wang';   
insert   into   table2   select   '1','90';   
insert   into   table2   select   '2','100';   
insert   into   table2   select   '3','70';

如表

-------------------------------------------------
table1
-------------------------------------------------
id name
1 lee
2 zhang

3 steve
4 wang

-------------------------------------------------

table2

-------------------------------------------------

id score
1 90
2 100

3 70

-------------------------------------------------

(1)左向外聯(lián)接的結(jié)果集包括 left outer 子句中指定的左表的所有行,而不僅僅是聯(lián)接列所匹配的行。如果左表的某行在右表中沒(méi)有匹配行,則在相關(guān)聯(lián)的結(jié)果集行中右表的所有選擇列表列均為空值(null)。

(2)sql語(yǔ)句

select * from table1 t1 left join table2 t2 on t1.id = t2.id


3 steve 3 70-------------結(jié)果-------------
id name id score
------------------------------
1 lee 1 90
2 zhang 2 100

4 wang null null
------------------------------

注釋:包含table1的所有子句,根據(jù)指定條件返回table2相應(yīng)的字段,不符合的以null顯示

(3)那么獲取差值

1
select * from table1 t1 left join table2 t2 on t1.id = t2.id WHERE t2.id is null

-------------結(jié)果-------------
id name id score

4 wang null null
------------------------------

下面是工作中實(shí)際遇到的情況:

##過(guò)濾出0銷售人員(即沒(méi)有銷售記錄的員工信息列表)。

#銷售人員(用戶角色中間表)

1
select userid from bbscs_role_user where roleid = 'sales'

# ---> 11條記錄

#統(tǒng)計(jì)表(用戶銷售記錄表)

1
select refid from bbscs_sales_income_stat where type = 4 and month = '2012-02' and amount != 0

# ---> 4條記錄

要求為:另外7個(gè)銷售人員的記錄列出來(lái)為目的。

##########這個(gè)是SQL語(yǔ)句模型 BEGIN##########

1
select * from b t2 left join a t1 on t1.a1 = t2.b1 WHERE t1.a1 is null

#########這個(gè)是SQL語(yǔ)句模型 END############

說(shuō)明:左表是數(shù)據(jù)多的那個(gè)表(基準(zhǔn)表如b表)。left join查詢。where條件是右邊的那個(gè)表(a表)某個(gè)字段(a1)為Null作為(判斷字段)

##將SQL返回結(jié)果作為臨時(shí)表來(lái)查詢

1
2
3
select * from (select userid from bbscs_role_user where roleid = 'sales') t2 left
join (select refid from bbscs_sales_income_stat where type = 4 and month = '2012-02'
and amount != 0) t1 on t2.userid = t1.refid WHERE t1.refid is null

# --->7條記錄

測(cè)試一:

##SQL語(yǔ)句,mysql 查詢兩個(gè)表中不同的值(主要是差值) 這個(gè)語(yǔ)句查詢還是存在問(wèn)題。

1
2
select t1.Userid from bbscs_role_user t1 left join bbscs_sales_income_stat t2 on t1.userid = t2.refid
and t1.roleid = 'sales' and t2.type = 4 and t2.month = '2012-02' and t2.amount != 0 where t2.id is null;

##表與表,條件與條件獨(dú)立出來(lái)。

# --->18條記錄

測(cè)試二:

1
2
select t1.Userid from bbscs_role_user t1 left join bbscs_sales_income_stat t2 on t1.userid = t2.refid
and t1.roleid = 'sales' and t2.type = 4 and t2.month = '2012-02' and t2.amount != 0 and t2.id is null

##where or and 區(qū)別

# --->22條記錄

###更為強(qiáng)大的臨時(shí)表查詢功能,將以上查詢結(jié)果作為一個(gè)整體放入。

##跟用戶部門中間表關(guān)聯(lián),按部門id排序顯示。

1
2
3
select t4.userid from( select * from (select userid from bbscs_role_user where roleid = 'sales') t2 left join
(select refid from bbscs_sales_income_stat where type = 4 and month = '2012-02' and amount != 0) t1 on
t2.userid = t1.refid WHERE t1.refid is null ) t3, bbscs_org_user t4 where t3.userid = t4.userid order by orgId

以上就是怎樣查詢兩個(gè)表中同一字段的不同數(shù)據(jù)值的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!


學(xué)習(xí)教程快速掌握從入門到精通的SQL知識(shí)。