nama | id |
1 | aa |
2 | bb |
3 | cc |
1 | aa |
2 | bb |
3 | cc |
nama | id |
1 | aa |
2 | bb |
3 | cc |
PILIH id BERBEDA,, nama KE #t DARI tabel1 HAPUS tabel1 MENYISIPKAN KE tabel1 PILIH * DARI #t |
ID | Keterampilan | Staf |
1 | 1 | VB |
2 | 1 | PHP |
3 | 1 | ASP |
4 | 2 | PHP |
5 | 3 | ASP |
6 | 4 | VB |
7 | 4 | ASP |
SELECT Employee FROM [Tabel] WHERE Employee IN(SELECT Employee FROM [Table] WHERE skill='VB' ) AND skill='PHP' |
3. Masalah penggabungan database
Ada dua tabel yang diakses. Saya ingin menggabungkan konten kedua tabel.
Tabel [a] memiliki struktur sebagai berikut:
[id] | nomor | nomor otomatis |
[nama] | teks | nama |
[harga] | nomor | harga |
[guige] | teks | spesifikasi |
[changjia] | teks | pabrikan |
[baozhuang] | teks | kemasan |
[danwei] | teks | unit |
Ada total 900 catatan. Kecuali bidang id dan nama, semua yang lain boleh kosong.
Tabel [b] memiliki struktur sebagai berikut:
[id] | nomor | nomor otomatis |
[nama] | teks | nama |
[harga] | nomor | harga |
[changjia] | teks | pabrikan |
[danwei] | teks | unit |
[xingzhi] | teks | properti |
Ada total 800 catatan. Kecuali bidang id dan nama, ada beberapa bidang yang kurang dari tabel [a], tetapi ada satu karakter [xingzhi] lagi.
Sekarang saya ingin membuat tabel baru [c] dengan struktur sebagai berikut, dan isinya adalah penjumlahan dari isi kedua tabel tersebut.
[id] | nomor | nomor otomatis |
[nama] | teks | nama |
[harga] | nomor | harga |
[guige] | teks | spesifikasi |
[changjia] | teks | pabrikan |
[baozhuang] | teks | kemasan |
[danwei] | teks | unit |
[xingzhi] | teks | alam |
Anda dapat menggunakan pernyataan sql, operasi manual, atau xml. Jangan khawatir tentang cara mengimplementasikannya. Saya akan sangat tertekan. Jika kita benar-benar harus memasukkan 800 catatan, saya akan mati.
menjawab:
1. Lewat sini
masukkan ke c(id,nama,.....) pilih id, nama, ..... dari a masukkan ke c(id,nama,.....) pilih maks(id)+1,nama,..... dari b |
2.Koreksi:
Jika dijalankan langsung di Query Analyzer:
masukkan ke c(nama,....) pilih nama,..... dari a masukkan ke c(nama,....) pilih nama,..... dari b |
3. Gunakan metode gabungan
masukkan ke [c] ([id], nomor, nomor otomatis) pilih [id], nomor, nomor otomatis dari [a] serikat pilih [id], nomor, nomor otomatis dari [b] |
4. solusi asp
<% 'Deteksi loop pada tabel a Setel rs = Server.CreateObject("ADODB.RECORDSET") rs.open "pilih * dari pesanan berdasarkan id", samb.,1,1 Lakukan selagi tidak rs.eof Panggil actAdd(rs("name")) 'Panggil fungsi seperti menambahkan konten ke tabel b! rs.MoveNext Lingkaran rs.Tutup Setr=Tidak ada Sub tindakanTambahkan(txt) Redupkan ts, sql sql = "masukkan ke dalam b(nama) nilai('"& txt &"')" Setel ts = Sambung.Jalankan(sql) ts.Tutup Tetapkan ts = Tidak ada akhir Sub %> |
5. solusi asp
<% redupkan arr_temp1,arr_temp2,arr_data set rs=conn.execute("pilih id,nama,harga,guige,changjia,baozhuang,danwei dari a") arr_temp1=rs.getrows rs.tutup atur rs=tidak ada set rs=conn.execute("pilih id,nama,harga,guige,changjia,danwei,xingzhi dari b") arr_temp2=rs.getrows rs.tutup atur rs=tidak ada rem mulai memproses redim arr_data(ubound(arr_temp1,2)+ubound(arr_temp2,2),7) rem menyalin isi dari dua array. Saya menulis bagian ini sendiri, membuat dua loop, dan kemudian menyimpannya di database. %> |
Terakhir konversikan beberapa pernyataan SQL klasik:
1. Direkomendasikan oleh Wawa: Beberapa pernyataan SQL yang sangat bagus
Deskripsi: Salin tabel (hanya salin strukturnya, nama tabel sumber: a, nama tabel baru: b)
SQL: pilih * ke b dari a di mana 1<>1
Deskripsi: Salin tabel (salin data, nama tabel sumber: a, nama tabel target: b)
SQL: masukkan ke dalam b(a, b, c) pilih d,e,f dari b;
Deskripsi: Menampilkan artikel, pengirim, dan waktu balasan terakhir
SQL: pilih a.title,a.username,b.adddate dari tabel a,(pilih max(adddate) adddate dari tabel di mana table.title=a.title) b
Deskripsi: Kueri gabungan luar (nama tabel 1: nama tabel 2: b)
SQL: pilih aa, ab, ac, bc, bd, bf dari LEFT OUT JOIN b ON aa = bc
Deskripsi: Jadwalkan pengingat lima menit sebelumnya
SQL: pilih * dari jadwal di mana tanggaliff('menit',f waktu mulai,getdate())>5
Deskripsi: Dua tabel terkait, hapus informasi di tabel utama yang tidak ada di tabel sekunder
SQL:
hapus dari info jika tidak ada ( pilih * dari infobz di mana info.infid=infobz.infid )
menjelaskan:--
SQL:
PILIH A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE
DARI TABEL1,
(PILIH X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE
DARI (PILIH NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND
DARI TABEL2
DIMANA TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X,
(PILIH NUM, UPD_DATE, STOCK_ONHAND
DARI TABEL2
DIMANA TO_CHAR(UPD_DATE,'YYYY/MM') =
TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') || '/01','YYYY/MM/DD') - 1, 'YYYY/MM') ) Y,
DIMANA X.NUM = Y.NUM (+)
DAN X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B
DIMANA A.NUM = B.NUM
menjelaskan:--
SQL:
pilih * dari studentinfo bila tidak ada(pilih * dari mahasiswa dimana studentinfo.id=student.id) dan nama jurusan='"&strdepartmentname&"' dan nama jurusan='"&strprofessionname&"' diurutkan berdasarkan jenis kelamin, tempat asal mahasiswa, jumlah perguruan tinggi skor ujian masuk
menjelaskan:
Dapatkan statistik tagihan telepon setiap unit selama satu tahun dari database (kuota tagihan telepon, ucapan selamat, daftar telegram dan pupuk, sumber dua tabel)
SQL:
PILIH a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') SEBAGAI telyear,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) SEBAGAI JAN,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) SEBAGAI JUMAT,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) SEBAGAI MAR,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) SEBAGAI APR,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) SEBAGAI MUNGKIN,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) SEBAGAI JUE,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '07', a.factration)) SEBAGAI JUL,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '08', a.factration)) SEBAGAI AGU,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) SEBAGAI SEP,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) SEBAGAI OKT,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) SEBAGAI NOV,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '12', a.factration)) SEBAGAI DES
DARI (PILIH a.userper, a.tel, a.standfee, b.telfeedate, b.factration
DARI TELFEESTAND a, TELFEE b
DIMANA a.tel = b.telfax) a
KELOMPOK OLEH a.pengguna, a.tel, a.biaya berdiri, TO_CHAR(a.telfeedate, 'yyyy')
Deskripsi: Masalah kueri gabungan empat tabel:
SQL: pilih * dari gabung dalam kiri b pada aa=bb gabung dalam kanan c pada aa=cc gabung dalam d pada aa=dd di mana .....
Deskripsi: Dapatkan nomor ID terkecil yang belum terpakai dalam tabel
SQL:
SELECT (CASE KETIKA ADA(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) sebagai HandleID
DARI Menangani
DI MANA TIDAK HandleID IN (PILIH a.HandleID - 1 DARI Handle a)
2. Hapus data duplikat
1. Kasus memiliki kunci utama
a.ID bidang unik (kunci utama unik)
hapus tabel
di mana id tidak ada
(
pilih max(id) dari grup tabel berdasarkan col1,col2,col3...
)
Field yang mengikuti klausa group by adalah kondisi yang digunakan untuk menentukan duplikasi. Misalnya jika hanya ada col1, maka selama isi field col1 sama, berarti recordnya sama.
b.Memiliki kunci utama bersama
Asumsikan col1+','+col2+','...col5 adalah kunci utama gabungan
pilih * dari tabel di mana col1+','+col2+','...col5 in (
pilih max(col1+','+col2+','...col5) dari tabel
di mana memiliki hitungan(*)>1
kelompokkan berdasarkan col1,col2,col3,col4
)
Field yang mengikuti klausa group by adalah kondisi yang digunakan untuk menentukan duplikasi. Misalnya jika hanya ada col1, maka selama isi field col1 sama, berarti recordnya sama.
c: Menilai semua bidang
pilih * ke #aa dari grup tabel berdasarkan id1,id2,....
hapus tabel
masukkan ke dalam tabel
pilih * dari #aa
2. Situasi tanpa kunci utama
a: Diimplementasikan menggunakan tabel sementara
pilih identitas(int,1,1) sebagai id,* ke #temp dari ta
hapus #temp
di mana id tidak ada
(
pilih maks(id) dari # grup berdasarkan col1,col2,col3...
)
hapus tabel ta
masukkan ke ta(...)
pilih ..... dari #temp
b: Diimplementasikan dengan mengubah struktur tabel (menambahkan bidang unik)
ubah tabel tabel tambahkan bidang baru int identitas (1,1)
hapus tabel
di mana newfield tidak berada
(
pilih min(bidang baru) dari grup tabel berdasarkan semua bidang kecuali bidang baru
)
ubah tabel tabel drop kolom newfield