nombre | de identificación |
1 | aa |
2 | bb |
3 | cc |
1 | aa |
2 | bb |
3 | cc |
id | nombre |
1 | aa |
2 | bb |
3 | cc |
SELECCIONAR ID DISTINTO, nombre EN #t DE tabla1 BORRAR tabla1 INSERTAR EN tabla1 SELECCIONAR * DESDE #t |
ID | Habilidades | del personal |
1 | 1 | VB |
2 | 1 | PHP |
3 | 1 | ASP |
4 | 2 | PHP |
5 | 3 | ASP |
6 | 4 | VB |
7 | 4 | ASP |
SELECCIONE empleado DE [Tabla] DONDE empleado EN(SELECCIONE empleado DE [Tabla] DONDE habilidad='VB' ) Y habilidad='PHP' |
3. Problemas de fusión de bases de datos
Hay dos tablas en acceso. Quiero fusionar el contenido de las dos tablas.
La tabla [a] tiene la siguiente estructura:
[id] | número | número automático |
[nombre] | nombre | texto |
[precio] | número | de precio |
[guige] | texto | de especificación |
[changjia] | texto | del fabricante |
[baozhuang] | texto | de embalaje |
[danwei] | texto | de la unidad |
Hay 900 registros en total, excepto los campos de identificación y nombre, todos los demás pueden estar vacíos.
El cuadro [b] tiene la siguiente estructura:
[id] | número | número automático |
[nombre] | nombre | texto |
[precio] | número | de precio |
[changjia] | texto | del fabricante |
[danwei] | texto | de la unidad |
[xingzhi] | texto | de propiedad |
Hay 800 registros en total, excepto los campos de identificación y nombre, hay algunos campos menos que la tabla [a], pero hay un carácter [xingzhi] más. Todos los demás pueden estar vacíos.
Ahora quiero generar una nueva tabla [c] con la siguiente estructura, y el contenido es la suma del contenido de las dos tablas.
[id] | número | número automático |
[nombre] | nombre | texto |
[precio] | número | de precio |
[guige] | texto | de especificación |
[changjia] | texto | del fabricante |
[baozhuang] | texto | del embalaje |
[danwei] | texto | de la unidad |
[xingzhi] | texto | de la naturaleza |
Puede usar declaraciones SQL, operaciones manuales o xml. No se preocupe por cómo implementarlo. Si realmente tenemos que ingresar 800 registros, moriré.
respuesta:
1. De esta manera
insertar en c(id,nombre,.......) seleccione id, nombre,..... de un insertar en c(id,nombre,.......) seleccione max(id)+1,nombre,..... de b |
2.Corrección:
Si se ejecuta directamente en Query Analyzer:
insertar en c(nombre,....) seleccione nombre,..... de un insertar en c(nombre,....) seleccione nombre,..... de b |
3. Utilice el método de unión
insertar en [c] ([id], número, número automático) seleccione [id], número, número automático de [a] unión seleccione [id], número, número automático de [b] |
4.solución asp
<% 'Detección de bucle de la tabla a Establecer rs = Server.CreateObject("ADODB.RECORDSET") rs.open "seleccionar * de un pedido por id",conn,1,1 Hazlo mientras no seas rs.eof Call actAdd(rs("name")) '¡Llame a una función como agregar contenido a la tabla b! rs.MoverSiguiente Bucle rs.Cerrar Configurar=Nada Sub actoAgregar(txt) ts tenues, sql sql = "insertar en b(nombre) valores('"& txt &"')" Establecer ts = Conn.Execute(sql) ts.Cerrar Establecer ts = Nada final sub %> |
5.solución asp
<% tenue arr_temp1,arr_temp2,arr_data set rs=conn.execute("seleccione id,nombre,precio,guige,changjia,baozhuang,danwei de a") arr_temp1=rs.getrows rs.cerrar establecer rs = nada set rs=conn.execute("seleccione id,nombre,precio,guige,changjia,danwei,xingzhi de b") arr_temp2=rs.getrows rs.cerrar establecer rs = nada rem comienza a procesar redimificar arr_data(ubound(arr_temp1,2)+ubound(arr_temp2,2),7) rem copia el contenido de las dos matrices. Escribí esta parte yo mismo, hice dos bucles y luego la almacené en la base de datos. %> |
Finalmente convierta algunas declaraciones SQL clásicas:
1. Recomendado por Wawa: algunas declaraciones SQL exquisitas
Descripción: Copie la tabla (solo copie la estructura, nombre de la tabla de origen: a, nombre de la nueva tabla: b)
SQL: seleccione * en b desde a donde 1<>1
Descripción: Copiar tabla (copiar datos, nombre de la tabla de origen: a, nombre de la tabla de destino: b)
SQL: insertar en b(a, b, c) seleccionar d,e,f de b;
Descripción: muestra el artículo, el remitente y la hora de la última respuesta.
SQL: seleccione a.title,a.username,b.adddate de la tabla a,(seleccione max(adddate) adddate de la tabla donde table.title=a.title) b
Descripción: consulta de unión externa (nombre de tabla 1: a nombre de tabla 2: b)
SQL: seleccione aa, ab, ac, bc, bd, bf de LEFT OUT JOIN b ON aa = bc
Descripción: Programar recordatorio con cinco minutos de anticipación
SQL: seleccione * del programa donde dateiff('minuto',f hora de inicio,getdate())>5
Descripción: Dos tablas relacionadas, elimina la información de la tabla principal que no está en la tabla secundaria
SQL:
eliminar de la información donde no existe (seleccione * de infobz donde info.infid=infobz.infid)
ilustrar:--
SQL:
SELECCIONE A.NUM, A.NOMBRE, B.UPD_DATE, B.PREV_UPD_DATE
DE LA TABLA 1,
(SELECCIONE X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE
DESDE (SELECCIONE NÚMERO, ACTUALIZACIÓN_FECHA, ENTRADAS_CANT., STOCK_ONHAND
DE LA TABLA 2
DONDE TO_CHAR(UPD_DATE,'AAAA/MM') = TO_CHAR(SYSDATE, 'AAAA/MM')) X,
(SELECCIONE NÚMERO, ACTUALIZAR_FECHA, STOCK_ONHAND
DE LA TABLA 2
DONDE TO_CHAR(UPD_DATE,'AAAA/MM') =
TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'AAAA/MM') || '/01','AAAA/MM/DD') - 1, 'AAAA/MM') ) Y,
DONDE X.NUM = Y.NUM (+)
AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B
DONDE A.NUM = B.NUM
ilustrar:--
SQL:
seleccione * de Studentinfo donde no existe (seleccione * de Student donde Studentinfo.id=student.id) y nombre de departamento='"&strdepartmentname&"' y nombre principal='"&strprofessionname&"' ordene por género, lugar de origen del estudiante, universidad total puntuación del examen de ingreso
ilustrar:
Obtenga las estadísticas de facturas telefónicas de cada unidad durante un año de la base de datos (cuota de facturas telefónicas, felicitaciones, lista de telegramas y fertilizantes, fuente de dos tablas)
SQL:
SELECCIONE a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) COMO JAN,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) COMO VIE,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) COMO MAR,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) AS APR,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) COMO MAYO,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) COMO JUE,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '07', a.factration)) COMO JUL,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '08', a.factration)) COMO AGU,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) AS SEP,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) COMO OCT,
SUM(decodificar(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) COMO NOV,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '12', a.factration)) AS DEC
DESDE (SELECCIONE a.userper, a.tel, a.standfee, b.telfeedate, b.factration
DE TELFEESTAND a, TELFEE b
DONDE a.tel = b.telfax) a
GRUPO POR a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'aaaa')
Descripción: Problema de consulta conjunta de cuatro tablas:
SQL: seleccione * de una unión interna izquierda b en aa=bb unión interna derecha c en aa=cc unión interna d en aa=dd donde .....
Descripción: obtiene el número de identificación no utilizado más pequeño de la tabla
SQL:
SELECCIONE (CASE CUANDO EXISTE (SELECCIONAR * DESDE Handle b DONDE b.HandleID = 1) ENTONCES MIN(HandleID) + 1 ELSE 1 END) como HandleID
DESDE el mango
DONDE NO HandleID IN (SELECCIONE a.HandleID - 1 FROM Handle a)
2. Eliminar datos duplicados
1. El caso de tener una clave primaria
a. ID de campo único (clave primaria única)
eliminar tabla
donde la identificación no está
(
seleccione max(id) del grupo de tablas por col1,col2,col3...
)
El campo que sigue a la cláusula group by es la condición que se utiliza para determinar la duplicación. Por ejemplo, si solo hay col1, siempre que el contenido del campo col1 sea el mismo, significa que los registros son los mismos.
b. Tener una clave primaria conjunta
Supongamos que col1+','+col2+','...col5 es la clave primaria conjunta
seleccione * de la tabla donde col1+','+col2+','...col5 en (
seleccione max(col1+','+col2+','...col5) de la tabla
donde tener recuento (*)>1
agrupar por col1,col2,col3,col4
)
El campo que sigue a la cláusula group by es la condición que se utiliza para determinar la duplicación. Por ejemplo, si solo hay col1, siempre que el contenido del campo col1 sea el mismo, significa que los registros son los mismos.
c: Juzgar todos los campos
seleccione * en #aa del grupo de tablas por id1,id2,....
eliminar tabla
insertar en la mesa
seleccione * de #aa
2. Situación sin clave primaria
a: Implementado usando tablas temporales
seleccione identidad(int,1,1) como id,* en #temp desde ta
eliminar #temp
donde la identificación no está
(
seleccione max(id) de # grupo por col1,col2,col3...
)
eliminar tabla ta
insertado en ta(...)
seleccione ..... de #temp
b: Implementado cambiando la estructura de la tabla (agregando un campo único)
alterar tabla tabla agregar nuevo campo int identidad (1,1)
eliminar tabla
donde newfield no está
(
seleccione min (nuevo campo) del grupo de tablas por todos los campos excepto nuevo campo
)
alterar tabla tabla soltar columna nuevo campo