| identifiant | nom |
| 1 | aa |
| 2 | bb |
| 3 | cc |
| 1 | aa |
| 2 | bb |
| 3 | cc |
| id | nom |
| 1 | aa |
| 2 | bb |
| 3 | cc |
| SELECT ID DISTINCT, nom DANS #t DE table1 SUPPRIMER table1 INSÉRER DANS table1 SÉLECTIONNER * DE #t |
| Compétences | du personnel | ID |
| 1 | 1 | VB |
| 2 | 1 | PHP |
| 3 | 1 | ASP |
| 4 | 2 | PHP |
| 5 | 3 | ASP |
| 6 | 4 | VB |
| 7 | 4 | ASP |
| SELECT employe FROM [Table] WHERE employe IN(SELECT employ FROM [Table] WHERE skills='VB' ) AND skills='PHP' |
3. Problèmes de fusion de bases de données
Il y a deux tables en accès. Je souhaite fusionner le contenu des deux tables.
Le tableau [a] a la structure suivante :
| [id] | numéro | numéro automatique |
| [nom] | texte | du nom |
| [prix] | numéro | de prix |
| [guige] | texte | de spécification |
| [changjia] | texte | du fabricant |
| [baozhuang] | texte | d'emballage |
| [danwei] | texte | de l'unité |
Il y a 900 enregistrements au total, à l'exception des champs id et name, tous les autres peuvent être vides.
Le tableau [b] a la structure suivante :
| [id] | numéro | numéro automatique |
| [nom] | texte | du nom |
| [prix] | numéro | de prix |
| [changjia] | texte | du fabricant |
| [danwei] | texte | de l'unité |
| [xingzhi] | texte | de la propriété |
Il y a 800 enregistrements au total. À l'exception des champs id et name, il y a quelques champs de moins que le tableau [a], mais il y a un caractère [xingzhi] supplémentaire. Tous les autres peuvent être vides.
Maintenant, je veux générer une nouvelle table [c] avec la structure suivante, et le contenu est la somme du contenu des deux tables.
| [id] | numéro | numéro automatique |
| [nom] | texte | du nom |
| [prix] | numéro | de prix |
| [guige] | texte | de spécification |
| [changjia] | texte | du fabricant |
| [baozhuang] | texte | de l'emballage |
| [danwei] | texte | de l'unité |
| [xingzhi] | texte | de la nature |
Vous pouvez utiliser des instructions SQL, des opérations manuelles ou XML. Ne vous inquiétez pas de la façon de l'implémenter. Si nous devons vraiment saisir 800 enregistrements, je mourrai.
répondre:
1. Par ici
| insérer dans c(id,name,.....) sélectionnez l'identifiant, le nom,..... d'un insérer dans c(id,name,.....) sélectionnez max(id)+1,nom,..... de b |
2.Correction :
Si exécuté directement dans Query Analyzer :
| insérer dans c(nom,....) sélectionnez le nom,..... d'un insérer dans c(nom,....) sélectionnez le nom,..... de b |
3. Utilisez la méthode syndicale
| insérer dans [c] ([id], numéro, numéro automatique) sélectionnez [id], numéro, numéro automatique à partir de [a] union sélectionnez [id], numéro, numéro automatique à partir de [b] |
Solution 4.asp
| <% 'Détection de boucle de la table a Définir rs = Server.CreateObject("ADODB.RECORDSET") rs.open "sélectionner * dans une commande par identifiant", conn, 1,1 Faire sans rs.eof Call actAdd(rs("name")) 'Appelle une fonction comme ajouter du contenu à la table b ! rs.MoveNext Boucle rs.Fermer Setrs=Rien Sous-acteAdd(txt) Dim ts, sql sql = "insérer dans les valeurs b(nom)('"& txt &"')" Définir ts = Conn.Execute(sql) ts.Fermer Définir ts = Rien fin du sous-marin %> |
Solution 5.asp
| <% faible arr_temp1,arr_temp2,arr_data set rs=conn.execute("select id,name,price,guige,changjia,baozhuang,danwei from a") arr_temp1=rs.getrows rs.fermer définir rs = rien set rs=conn.execute("select id,name,price,guige,changjia,danwei,xingzhi from b") arr_temp2=rs.getrows rs.fermer définir rs = rien rem commence le traitement redim arr_data(ubound(arr_temp1,2)+ubound(arr_temp2,2),7) rem copie le contenu des deux tableaux. J'ai écrit cette partie moi-même, fait deux boucles, puis je l'ai stockée dans la base de données. %> |
Enfin, convertissez quelques instructions SQL classiques :
1. Recommandé par Wawa : quelques instructions SQL exquises
Description : Copiez la table (copiez uniquement la structure, nom de la table source : a, nouveau nom de la table : b)
SQL : sélectionnez * dans b à partir de a où 1<>1
Description : Copier la table (copier les données, nom de la table source : a, nom de la table cible : b)
SQL : insérer dans b(a, b, c) sélectionner d,e,f à partir de b ;
Description : Afficher l'article, l'auteur de l'article et l'heure de la dernière réponse
SQL : sélectionnez a.title,a.username,b.adddate dans la table a, (sélectionnez max(adddate) adddate dans la table où table.title=a.title) b
Description : Requête de jointure externe (nom de table 1 : un nom de table 2 : b)
SQL : sélectionnez aa, ab, ac, bc, bd, bf à partir de a LEFT OUT JOIN b ON aa = bc
Description : Planifier un rappel cinq minutes à l'avance
SQL : sélectionnez * dans le calendrier où datediff('minute',f start time,getdate())>5
Description : Deux tables liées, supprimez les informations de la table principale qui ne figurent pas dans la table secondaire
SQL :
supprimer des informations là où il n'existe pas (sélectionnez * depuis infobz où info.infid=infobz.infid)
illustrer:--
SQL :
SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE
À PARTIR DU TABLEAU1,
(SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE
FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND
DU TABLEAU2
OÙ TO_CHAR(UPD_DATE,'AAAA/MM') = TO_CHAR(SYSDATE, 'AAAA/MM')) X,
(SELECT NUM, UPD_DATE, STOCK_ONHAND
DU TABLEAU2
OÙ TO_CHAR(UPD_DATE,'AAAA/MM') =
TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'AAAA/MM') || '/01','AAAA/MM/JJ') - 1, 'AAAA/MM') ) O,
OÙ X.NUM = Y.NUM (+)
ET X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B
OÙ A.NUM = B.NUM
illustrer:--
SQL :
sélectionnez * dans studentinfo là où il n'existe pas (sélectionnez * dans student où studentinfo.id=student.id) et nom du département ='"&strdepartmentname&"' et nom majeur ='"&strprofessionname&"' triés par sexe, lieu d'origine de l'étudiant, nombre total d'universités résultat de l'examen d'entrée
illustrer:
Obtenez les statistiques de facture de téléphone de chaque unité pour un an à partir de la base de données (quota de facture de téléphone, félicitations, liste de télégrammes et d'engrais, source de deux tableaux)
SQL :
SELECT a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) AS JAN,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) AS FRI,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) AS MAR,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) AS APR,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) COMME PEUT,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) AS JUE,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '07', a.factration)) AS JUL,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '08', a.factration)) AS AGU,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) AS SEP,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) AS OCT,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) AS NOV,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '12', a.factration)) AS DEC
FROM (SELECT a.userper, a.tel, a.standfee, b.telfeedate, b.factration
DE TELFEESTAND a, TELFEE b
OÙ a.tel = b.telfax) a
GROUP BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'aaaa')
Description : Problème de requête conjointe à quatre tables :
SQL : sélectionnez * à partir d'une jointure interne gauche b sur aa=bb jointure interne droite c sur aa=cc jointure interne d sur aa=dd où .....
Description : Obtenez le plus petit numéro d'identification inutilisé du tableau
SQL :
SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) comme HandleID
DE Poignée
OÙ PAS HandleID IN (SELECT a.HandleID - 1 FROM Handle a)
2. Supprimez les données en double
1. Le cas d'avoir une clé primaire
a. ID de champ unique (clé primaire unique)
supprimer le tableau
où l'identifiant n'est pas dans
(
sélectionnez max(id) dans le groupe de tables par col1,col2,col3...
)
Le champ qui suit la clause group by est la condition que vous utilisez pour déterminer la duplication. Par exemple, s'il n'y a que col1, tant que le contenu du champ col1 est le même, cela signifie que les enregistrements sont les mêmes.
b. Avoir une clé primaire commune
Supposons que col1+','+col2+','...col5 est la clé primaire commune
sélectionnez * dans le tableau où col1+','+col2+','...col5 dans (
sélectionnez max(col1+','+col2+','...col5) dans le tableau
où avoir count(*)>1
regrouper par col1, col2, col3, col4
)
Le champ qui suit la clause group by est la condition que vous utilisez pour déterminer la duplication. Par exemple, s'il n'y a que col1, tant que le contenu du champ col1 est le même, cela signifie que les enregistrements sont les mêmes.
c : Juger tous les domaines
sélectionnez * dans #aa à partir du groupe de tables par id1, id2,....
supprimer le tableau
insérer dans le tableau
sélectionnez * dans #aa
2. Situation sans clé primaire
a : implémenté à l'aide de tables temporaires
sélectionnez l'identité (int, 1,1) comme identifiant, * dans #temp à partir de ta
supprimer #temp
où l'identifiant n'est pas dans
(
sélectionnez max(id) dans # groupe par col1,col2,col3...
)
supprimer la table ta
insérer dans ta(...)
sélectionnez ..... à partir de #temp
b : implémenté en modifiant la structure de la table (ajout d'un champ unique)
modifier la table table ajouter un nouveau champ int identité (1,1)
supprimer le tableau
où Newfield n'est pas présent
(
sélectionnez min (newfield) dans le groupe de tables par tous les champs sauf newfield
)
modifier la table déposer la colonne newfield