怎樣查詢兩個表中同一字段的不同數據值
例如:
A表中的字段a有40000條數據
B表中的字段a有60000條數據,其中的40000條數據跟A表是一樣的
怎樣能把那不一樣的20000條數據查詢出來?。?/p>
–建表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)左向外聯接的結果集包括?? left?? outer???子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均為空值(null)。??
(2)sql語句??
select?*?from?table1?t1?left?join?table2?t2?on?t1.id?=?t2.id
3 steve 3 70————-結果————-???
id name id score???
——————————???
1 lee 1 90???
2 zhang 2 100??
4 wang null null???
——————————??
注釋:包含table1的所有子句,根據指定條件返回table2相應的字段,不符合的以null顯示
(3)那么獲取差值
1
|
select?*?from?table1?t1?left?join?table2?t2?on?t1.id?=?t2.id?WHERE?t2.id?is?null
|
?
————-結果————-???
id name id score??
4 wang null null???
——————————??
?
下面是工作中實際遇到的情況:
##過濾出0銷售人員(即沒有銷售記錄的員工信息列表)。
#銷售人員(用戶角色中間表)
1
|
select?userid?from?bbscs_role_user?where?roleid?=?‘sales’
|
?
?# —> 11條記錄
?
#統計表(用戶銷售記錄表)
1
|
select?refid?from?bbscs_sales_income_stat?where?type?=?4?and?month?=?‘2012-02’?and?amount?!=?0
|
?
?# —> 4條記錄
要求為:另外7個銷售人員的記錄列出來為目的。
?
##########這個是SQL語句模型?BEGIN##########
1
|
select?*?from?b?t2?left?join?a?t1?on?t1.a1?=?t2.b1?WHERE?t1.a1?is?null
|
?
#########這個是SQL語句模型?END############
說明:左表是數據多的那個表(基準表如b表)。left join查詢。where條件是右邊的那個表(a表)某個字段(a1)為Null作為(判斷字段)
?
##將SQL返回結果作為臨時表來查詢
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條記錄
?
?
測試一:
##SQL語句,mysql?查詢兩個表中不同的值(主要是差值)??這個語句查詢還是存在問題。
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;
|
?##表與表,條件與條件獨立出來。
?# —>18條記錄
?
?
測試二:
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?區別
?# —>22條記錄
?
?
###更為強大的臨時表查詢功能,將以上查詢結果作為一個整體放入。
##跟用戶部門中間表關聯,按部門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
|