Comment interroger différentes valeurs de données du même champ dans deux tables
Par exemple :
Le champ a dans la table A contient 40 000 éléments de données
Le champ a dans la table B a 60 000 40 000 éléments de données sont identiques au tableau A
Comment pouvons-nous interroger les 20 000 éléments de données différents ?
--Créer des tableaux 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';
comme indiqué dans le tableau
-------- -- ---------------------------------------
tableau1"
- --- ---------------------------------------------
nom d'identification
1 lee
2 zhang
3 steve
4 wang
------------------ --- ------------------
tableau2
------ --- ----------------------------------------------------
score d'identification
1 90
2 100
3 70
---------------------------- -- ---------------------
(1) L'ensemble de résultats de la jointure externe gauche inclut la jointure externe gauche clause spécifiée dans Toutes les lignes de la table de gauche, pas seulement les lignes correspondant à la colonne de jointure. Si une ligne du tableau de gauche n'a aucune ligne correspondante dans le tableau de droite, toutes les colonnes de la liste de sélection du tableau de droite seront nulles dans la ligne de l'ensemble de résultats associée.
(2)instruction SQL
select * from table1 t1 left join table2 t2 on t1.id = t2.id
3 steve 3 70---------- - -Résultat-------------
id nom id score
----------------------------- - -----
1 lee 1 90
2 zhang 2 100
4 wang null null
---------------- -- -----------
Remarque : contient toutes les clauses de la table1, renvoie les champs correspondants de la table2 selon les conditions spécifiées et affiche null comme null
( 3 ) Ensuite obtenez la différence
1 |
select * from table1 t1 left join table2 t2 on t1.id = t2.id WHERE t2.id is null
|
-------------Résultat-------------
id nom id score
4 wang null null
--------------------------------
Voici la situation réelle rencontrée au travail :
## Filtrez 0 vendeur (c'est-à-dire une liste d'informations sur les employés sans enregistrements de ventes).
# Vendeur (table intermédiaire de rôle utilisateur)
1 |
select userid from bbscs_role_user where roleid = 'sales'
|
# ---> 11 enregistrements
# Tableau statistique (tableau des enregistrements de ventes des utilisateurs)
1 |
select refid from bbscs_sales_income_stat where type = 4 and month = '2012-02' and amount != 0
|
# ---> 4 enregistrements
les exigences sont les suivantes : les enregistrements des 7 autres vendeurs sont répertoriés à cet effet.
##########Ceci est le modèle d'instruction SQL BEGIN##########
1 |
select * from b t2 left join a t1 on t1.a1 = t2.b1 WHERE t1.a1 is null
|
#########Ceci est le modèle d'instruction SQL END############
Explication : La table de gauche est la table avec plus de données ( le tableau de référence est tel que le tableau b). requête de jointure gauche. La condition Where est qu'un champ (a1) de la table de droite (une table) est nul comme (champ de jugement)
##Requête du résultat de retour SQL en tant que table temporaire
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 enregistrements
Test 1 :
##Instruction SQL, Mysql interroge différentes valeurs (principalement des différences) dans deux tables. Il y a toujours un problème avec cette requête d'instruction.
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 ;
|
##Les tableaux et tableaux, les conditions et les conditions sont indépendants.
# --->18 enregistrements
Test 2 :
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
|
##où ou et La différence
# --->22 enregistrements
###Temporaire plus puissant La table La fonction de requête place les résultats de la requête ci-dessus dans leur ensemble.
## est associé à la table intermédiaire des départements utilisateurs et est affiché trié par identifiant de département.
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
|
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!