ホームページ  >  記事  >  データベース  >  2 つのテーブルの同じフィールドの異なるデータ値をクエリする方法

2 つのテーブルの同じフィールドの異なるデータ値をクエリする方法

怪我咯
怪我咯オリジナル
2017-06-23 13:34:129904ブラウズ

2 つのテーブルの同じフィールドの異なるデータ値をクエリする方法

例:

テーブル A のフィールド a には 40,000 個のデータがあります
テーブル B のフィールド a には 60,000 個のデータがあり、そのうち 40,000 個のデータはデータはテーブル A のものと同じです。 同じ 20,000 個の異なるデータをクエリするにはどうすればよいでしょうか?

--テーブル 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';

as table

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

テーブル1
------------------------------------- ------ ---------------------
ID名
1 リー
2 チャン

3 スティーブ

4 ワン

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

table2

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

IDスコア

1 90
2 100

3 70

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

(1) 左外部結合の結果セットには、左外部句で指定された左テーブルのすべての行が含まれます。結合列と一致する行のみ。左側のテーブルの行に右側のテーブルに一致する行がない場合、右側のテーブルのすべての選択リスト列は、関連する結果セット行で null になります。

(2)SQL文

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


3 steve 3 70-------------結果------------- id name idスコア
-------------------------------------------------
1 リー 1 90
2 チャン 2 100

4 王ヌルnull

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

注: table1 のすべての句が含まれており、指定された条件に従って table2 の対応するフィールドを返します。 、いいえ 一致した場合は null と表示されます

(3) そして、その差分を取得します

1
select * from table1 t1 left join table2 t2 on t1 .id = t2.id WHERE t2.id は <code class="sql color1">nullです
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
🎜-------------結果-- -------- ---- 🎜ID 名前 ID スコア 🎜🎜4 ワンヌルヌル 🎜--------------------------- ------ 🎜🎜 🎜🎜 以下は職場で遭遇する実際の状況です: 🎜🎜## 0 人の営業担当者を除外します (つまり、営業記録のない従業員情報のリスト)。 🎜🎜#Salesperson (ユーザーロール中間テーブル)🎜🎜🎜🎜🎜🎜1🎜🎜🎜🎜🎜select userid から bbscs_role_user どこから roleid = 'sales'🎜🎜🎜🎜🎜🎜🎜 🎜🎜 # ---> 11 レコード 🎜🎜 🎜🎜#統計テーブル ( ユーザーの売上レコード テーブル) 🎜🎜🎜🎜🎜🎜1🎜🎜🎜🎜🎜select refid from bbscs_sales_income_stat where type = 4 = '2012-02' and amount != 0🎜🎜🎜🎜🎜🎜

# ---> 4 レコード

要件は次のとおりです: 他の 7 人の営業スタッフのレコードがこの目的のためにリストされます。

##########これは SQL ステートメント モデル BEGIN##########

1
select * from b t2 left join t1 on t1.a1 = t2.b1 WHERE t1 .a1 nullselect 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
🎜🎜###### # ##これは SQL ステートメント モデルです END############🎜🎜 説明: 左側のテーブルは、より多くのデータを含むテーブルです (ベンチマーク テーブルはテーブル b などです)。左結合クエリ。 where条件は、右側のテーブル(aテーブル)の特定のフィールド(a1)が(判定フィールド)としてNullであること🎜🎜 🎜🎜## SQLの戻り結果を一時テーブルとしてクエリする 🎜🎜🎜🎜🎜🎜1 🎜
2🎜3🎜🎜🎜🎜🎜選択 * from (select ユーザー ID from bbscs_role_user where code> <code class="sql plain">roleid = 'sales') t2 left 🎜
結合 (選択 refid から bbscs_sales_income_stat どこ type = 4 = '2012-02' 🎜 <div class="linenumber3 index2 alt2"> <code class="sql color1">and amount != 0) t1 オン t2.userid = t1.refid WHERE t1.refid null🎜🎜🎜🎜🎜🎜

# --->7条记录

测试一:

##SQL语句、mysql 查询两个表内の異なる值(主是差值) これこの句には問題も存在する。

1
2
select t1.Userid から bbscs_role_user t1 参加 code> <code class="sql plain">bbscs_sales_income_stat t2 on t1.userid = t2.refid 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
およびt1.roleid = 'sales' および t2.type = 4 および t2. = '2012 -02' and t2.amount != 0 ここで t2.id null;
🎜🎜 ##表と表、条件と条件は独立しています。🎜🎜 # --->18条记录🎜🎜 🎜🎜 🎜🎜検査二:🎜🎜🎜🎜🎜🎜1🎜🎜2🎜🎜🎜🎜🎜select t1.Userid から bbscs_role_user t1 参加 <code class="sql plain">bbscs_sales_income_stat t2 on t1.userid = t2.refid code>🎜🎜<code class="sql color1">および t1.roleid = 'sales' および t2.type = 4 および t2. = ' 2012-02' および t2.amount != 0 そして t2.id null🎜 🎜🎜🎜🎜🎜

##where or and

# --->22 レコード

###より強力な一時テーブル クエリ関数。上記のクエリ結果を全体として出力します。

##はユーザー部門中間テーブルに関連付けられており、部門ID順に並べて表示されます。

t2。 userid = t1.refid WHEREt1.refid は <code class="sql color1">null) t3, bbscs_org_user t4 where t3.userid = t4.userid 順序by orgId
1
2
3
select t4.userid from( select * から (select ユーザー ID from bbscs_role_user ここ roleid = 'sales') t2 参加 select t4.userid fromselect 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
(選択 refid から bbscs_sales_income_stat どこ type = 4 および = '2012-02' および 量 != 0) t1 オン


🎜🎜🎜

以上が2 つのテーブルの同じフィールドの異なるデータ値をクエリする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:MyBatis ファジー クエリの SQL スプライシングの 2 つの方法次の記事:MyBatis ファジー クエリの SQL スプライシングの 2 つの方法

関連記事

続きを見る