ID- | Name |
1 | aa |
2 | bb |
3 | cc |
1 | aa |
2 | bb |
3 | cc |
ID- | Name |
1 | aa |
2 | bb |
3 | cc |
SELECT DISTINCT id,, name IN #t AUS Tabelle1 Tabelle1 löschen EINFÜGEN INTO Tabelle1 WÄHLEN * VON #t |
ID | - | Mitarbeiterfähigkeiten |
1 | 1 | VB |
2 | 1 | PHP |
3 | 1 | ASP |
4 | 2 | PHP |
5 | 3 | ASP |
6 | 4 | VB |
7 | 4 | ASP |
SELECT Employee FROM [Table] WHERE Employee IN(SELECT Employee FROM [Table] WHERE Skill='VB') AND Skill='PHP' |
3. Probleme bei der Datenbankzusammenführung
Es gibt zwei Tabellen im Zugriff. Ich möchte den Inhalt der beiden Tabellen zusammenführen.
Tabelle [a] hat folgenden Aufbau:
[id] | Nummer | automatische Nummer |
[Name | ] | Namenstext |
[Preis | ] | Preisnummer |
[guige | ] | Spezifikationstext |
[ | changjia] | Herstellertext |
[ | baozhuang] | Verpackungstext |
[ | danwei] | Einheitentext |
Insgesamt gibt es 900 Datensätze, mit Ausnahme der Felder „ID“ und „Name“, alle anderen können leer sein.
Tabelle [b] hat folgenden Aufbau:
[id] | Nummer | automatische Nummer |
[Name | ] | Namenstext |
[Preis | ] | Preisnummer |
[changjia | ] | Herstellertext |
[ | danwei] | Einheitentext |
[ | xingzhi] | Eigenschaftstext |
Insgesamt gibt es 800 Datensätze. Außer den Feldern „id“ und „name“ gibt es einige Felder weniger als in Tabelle [a], aber es gibt ein weiteres [xingzhi]-Zeichen. Alle anderen können leer sein.
Jetzt möchte ich eine neue Tabelle [c] mit der folgenden Struktur erstellen, und der Inhalt ist die Summe der Inhalte der beiden Tabellen.
[id] | Nummer | automatische Nummer |
[Name | ] | Namenstext |
[Preis | ] | Preisnummer |
[guige | ] | Spezifikationstext |
[ | changjia] | Herstellertext |
[ | baozhuang] | Verpackungstext |
[ | danwei] | Einheitentext |
[ | xingzhi] | Naturtext |
Sie können SQL-Anweisungen, manuelle Operationen oder XML verwenden. Machen Sie sich keine Sorgen darüber, wie Sie es implementieren. Wenn wir wirklich 800 Datensätze eingeben müssen, werde ich sterben.
Antwort:
1. Hier entlang
Einfügen in c(id,name,......) Wählen Sie ID, Name,..... von a Einfügen in c(id,name,......) wähle max(id)+1,name,..... von b |
2. Korrektur:
Bei direkter Ausführung im Query Analyzer:
Einfügen in c(Name,...) Namen auswählen,..... von a Einfügen in c(Name,...) Namen auswählen,..... von b |
3. Verwenden Sie die Union-Methode
Einfügen in [c] ([id], Nummer, automatische Nummer) Wählen Sie [ID], Nummer, automatische Nummer aus [a] Union Wählen Sie [ID], Nummer, automatische Nummer aus [b] |
4.asp-Lösung
<% 'Schleifenerkennung von Tabelle a Setze rs = Server.CreateObject("ADODB.RECORDSET") rs.open „select * from an order by id“,conn,1,1 Tun Sie es zwar nicht, rs.eof Call actAdd(rs("name")) 'Rufen Sie eine Funktion wie das Hinzufügen von Inhalten zu Tabelle b auf! rs.MoveNext Schleife rs.Schließen Setrs=Nichts Sub actAdd(txt) Dim ts, sql sql = "In b(Name) Werte einfügen('"& txt &"')" Setze ts = Conn.Execute(sql) ts.Schließen Setze ts = Nichts Ende Sub %> |
5.asp-Lösung
<% Dimmen Sie 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.close setze rs=nichts set rs=conn.execute("select id,name,price,guige,changjia,danwei,xingzhi from b") arr_temp2=rs.getrows rs.close setze rs=nichts rem beginnt mit der Verarbeitung redim arr_data(ubound(arr_temp1,2)+ubound(arr_temp2,2),7) rem kopiert den Inhalt der beiden Arrays. Ich habe diesen Teil selbst geschrieben, zwei Schleifen erstellt und ihn dann in der Datenbank gespeichert. %> |
Konvertieren Sie abschließend einige klassische SQL-Anweisungen:
1. Von Wawa empfohlen: Einige exquisite SQL-Anweisungen
Beschreibung: Kopieren Sie die Tabelle (kopieren Sie nur die Struktur, Quelltabellenname: a, neuer Tabellenname: b)
SQL: Wählen Sie * in b aus a aus, wobei 1<>1
Beschreibung: Tabelle kopieren (Daten kopieren, Quelltabellenname: a, Zieltabellenname: b)
SQL: in b(a, b, c) einfügen, d,e,f aus b auswählen;
Beschreibung: Zeigt den Artikel, den Absender und die letzte Antwortzeit an
SQL: Wählen Sie a.title,a.username,b.adddate aus Tabelle a aus (wählen Sie max(adddate) adddate aus Tabelle aus, wobei table.title=a.title ist) b
Beschreibung: Outer-Join-Abfrage (Tabellenname 1: a, Tabellenname 2: b)
SQL: Wählen Sie aa, ab, ac, bc, bd, bf aus a LEFT OUT JOIN b ON aa = bc
Beschreibung: Planen Sie eine Erinnerung fünf Minuten im Voraus
SQL: Wählen Sie * aus dem Zeitplan aus, wobei datediff('minute',f start time,getdate())>5 ist
Beschreibung: Zwei verwandte Tabellen. Löschen Sie die Informationen in der Haupttabelle, die nicht in der Sekundärtabelle enthalten sind
SQL:
Aus Info löschen, wo nicht vorhanden (wählen Sie * aus Infobz aus, wobei info.infid=infobz.infid ist)
veranschaulichen:--
SQL:
SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE
AUS TABELLE1,
(SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE
FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND
AUS TABELLE2
WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X,
(SELECT NUM, UPD_DATE, STOCK_ONHAND
AUS TABELLE2
WHERE TO_CHAR(UPD_DATE,'YYYY/MM') =
TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') || '/01','YYYY/MM/DD') - 1, 'YYYY/MM') ) Y,
WO X.NUM = Y.NUM (+)
AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B
WO A.NUM = B.NUM
veranschaulichen:--
SQL:
Wählen Sie * aus „Studentinfo“ aus, wo nicht vorhanden (wählen Sie * aus „Student“ aus, wobei „studentinfo.id=student.id“) und Abteilungsname='"&strdepartmentname&"' und Hauptfachname='"&strprofessionname&"', sortiert nach Geschlecht, Herkunftsort des Studenten, gesamte Hochschule Ergebnis der Aufnahmeprüfung
veranschaulichen:
Holen Sie sich die Telefonrechnungsstatistik jeder Einheit für ein Jahr aus der Datenbank (Telefonrechnungsquote, Glückwünsche, Telegramm- und Düngemittelliste, zwei Tabellenquellen).
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)) AS MAY,
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
VON TELFEESTAND a, TELFEE b
WO a.tel = b.telfax) a
GROUP BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy')
Beschreibung: Problem mit der gemeinsamen Abfrage von vier Tabellen:
SQL: Wählen Sie * aus einem linken inneren Join b auf aa=bb rechten inneren Join c auf aa=cc inneren Join d auf aa=dd, wobei .....
Beschreibung: Rufen Sie die kleinste nicht verwendete ID-Nummer in der Tabelle ab
SQL:
SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) als HandleID
VON Griff
WHERE NOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a)
2. Entfernen Sie doppelte Daten
1. Der Fall eines Primärschlüssels
a. Eindeutige Feld-ID (eindeutiger Primärschlüssel)
Tabelle löschen
wo id nicht drin ist
(
Wählen Sie max(id) aus der Tabellengruppe nach Spalte 1, Spalte 2, Spalte 3 ... aus.
)
Das Feld, das auf die Group-by-Klausel folgt, ist die Bedingung, die Sie verwenden, um die Duplizierung zu bestimmen. Wenn beispielsweise nur Spalte 1 vorhanden ist, bedeutet dies, dass die Datensätze identisch sind, solange der Inhalt des Felds Spalte 1 gleich ist.
b. Einen gemeinsamen Primärschlüssel haben
Angenommen, col1+','+col2+','...col5 ist der gemeinsame Primärschlüssel
Wählen Sie * aus der Tabelle aus, in der col1+','+col2+','...col5 in (
Wählen Sie max(col1+','+col2+','...col5) aus der Tabelle aus
wobei count(*)>1 ist
Gruppieren Sie nach Spalte 1, Spalte 2, Spalte 3, Spalte 4
)
Das Feld, das auf die Group-by-Klausel folgt, ist die Bedingung, die Sie verwenden, um die Duplizierung zu bestimmen. Wenn beispielsweise nur Spalte 1 vorhanden ist, bedeutet dies, dass die Datensätze identisch sind, solange der Inhalt des Felds Spalte 1 gleich ist.
c: Beurteilen Sie alle Felder
Wählen Sie * in #aa aus der Tabellengruppe nach ID1, ID2, ... aus.
Tabelle löschen
in die Tabelle einfügen
Wählen Sie * aus #aa
2. Situation ohne Primärschlüssel
a: Implementiert mithilfe temporärer Tabellen
Wählen Sie Identity(int,1,1) als id,* in #temp von ta aus
#temp löschen
wo id nicht drin ist
(
Wählen Sie max(id) aus # Gruppe nach Spalte 1, Spalte 2, Spalte 3 ... aus.
)
Tabelle ta löschen
eingefügt in ta(...)
wählen Sie ..... aus #temp
b: Implementiert durch Ändern der Tabellenstruktur (Hinzufügen eines eindeutigen Felds)
Tabelle ändern Tabelle hinzufügen neues Feld int Identität(1,1)
Tabelle löschen
Wo Newfield nicht drin ist
(
Wählen Sie min(newfield) aus der Tabellengruppe nach allen Feldern außer newfield aus
)
Tabelle ändern, Spalte löschen, neues Feld