nome | de identificação |
1 | aa |
2 | bb |
3 | cc |
1 | aa |
2 | bb |
3 | cc |
nome | de identificação |
1 | aa |
2 | bb |
3 | cc |
SELECIONE ID DISTINTO, nome EM #t FROM tabela1 DELETE tabela1 INSERIR NA tabela1 SELECIONE * DE #t |
Habilidades | da equipe | de identificação |
1 | 1 | VB |
2 | 1 | PHP |
3 | 1 | ASP |
4 | 2 | PHP |
5 | 3 | ASP |
6 | 4 | VB |
7 | 4 | ASP |
SELECT funcionário FROM [Tabela] WHERE funcionário IN(SELECT funcionário FROM [Tabela] WHERE habilidade='VB' ) AND habilidade='PHP' |
3. Problemas de fusão de banco de dados
Existem duas tabelas no acesso. Quero mesclar o conteúdo das duas tabelas.
A tabela [a] tem a seguinte estrutura:
[id] | número | número automático |
[nome] | texto | do nome |
[preço] | número | do preço |
[guige] | texto | de especificação |
[changjia] | texto | do fabricante |
[baozhuang] | texto | da embalagem |
[danwei] | texto | da unidade |
Existem 900 registros no total. Exceto os campos id e nome, todos os outros podem estar vazios.
A tabela [b] tem a seguinte estrutura:
[id] | número | número automático |
[nome] | texto | do nome |
[preço] | número | do preço |
[changjia] | texto | do fabricante |
[danwei] | texto | da unidade |
[xingzhi] | texto | da propriedade |
Existem 800 registros no total, exceto os campos de id e nome, existem alguns campos a menos que a tabela [a], mas há mais um caractere [xingzhi].
Agora quero gerar uma nova tabela [c] com a seguinte estrutura, e o conteúdo é a soma do conteúdo das duas tabelas.
[id] | número | número automático |
[nome] | texto | do nome |
[preço] | número | do preço |
[guige] | texto | de especificação |
[changjia] | texto | do fabricante |
[baozhuang] | texto | da embalagem |
[danwei] | texto | da unidade |
[xingzhi] | texto | da natureza |
Você pode usar instruções sql, operações manuais ou xml. Não se preocupe em como implementá-lo, ficarei muito deprimido. Se realmente precisarmos inserir 800 registros, morrerei.
responder:
1. Por aqui
insira em c(id,nome,.....) selecione id, nome, ..... de um insira em c(id,nome,.....) selecione max(id)+1,nome,..... de b |
2. Correção:
Se executado diretamente no Query Analyzer:
insira em c(nome,....) selecione o nome,..... de um insira em c(nome,....) selecione o nome,..... de b |
3. Use o método de união
inserir em [c] ([id], número, número automático) selecione [id], número, número automático de [a] união selecione [id], número, número automático de [b] |
Solução 4.asp
<% 'Detecção de loop da tabela a Definir rs = Server.CreateObject("ADODB.RECORDSET") rs.open "selecione * de um pedido por id",conn,1,1 Faça enquanto não rs.eof Call actAdd(rs("name")) 'Chama uma função como adicionar conteúdo à tabela b! rs.MoveNext Laço rs.Fechar Setrs=Nada Sub atoAdd(txt) Dim ts,sql sql = "inserir em b(nome) valores('"& txt &"')" Definir ts = Conn.Execute(sql) ts.Fechar Definir ts = Nada final Sub %> |
Solução 5.asp
<% dim arr_temp1,arr_temp2,arr_data set rs = conn.execute ("selecione id, nome, preço, guige, changjia, baozhuang, danwei de a") arr_temp1=rs.getrows rs.fechar definir rs = nada set rs = conn.execute ("selecione id, nome, preço, guige, changjia, danwei, xingzhi de b") arr_temp2=rs.getrows rs.fechar definir rs = nada rem inicia o processamento redimensionar arr_data(ubound(arr_temp1,2)+ubound(arr_temp2,2),7) rem copia o conteúdo dos dois arrays. Eu mesmo escrevi essa parte, fiz dois loops e depois armazenei no banco de dados. %> |
Finalmente converta algumas instruções SQL clássicas:
1. Recomendado por Wawa: Algumas instruções SQL excelentes
Descrição: Copie a tabela (copie apenas a estrutura, nome da tabela de origem: a, novo nome da tabela: b)
SQL: selecione * em b de a onde 1<>1
Descrição: Copiar tabela (copiar dados, nome da tabela de origem: a, nome da tabela de destino: b)
SQL: insira em b(a, b, c) selecione d,e,f de b;
Descrição: Exibe o artigo, remetente e horário da última resposta
SQL: selecione a.title,a.username,b.adddate da tabela a,(selecione max(adddate) adddate da tabela onde table.title=a.title) b
Descrição: Consulta de junção externa (nome da tabela 1: a nome da tabela 2: b)
SQL: selecione aa, ab, ac, bc, bd, bf de a LEFT OUT JOIN b ON aa = bc
Descrição: Agende lembrete com cinco minutos de antecedência
SQL: selecione * do agendamento onde datediff('minuto',f hora de início,getdate())>5
Descrição: Duas tabelas relacionadas, exclua as informações da tabela principal que não estão na tabela secundária
SQL:
excluir de informações onde não existe (selecione * de infobz onde info.infid=infobz.infid)
ilustrar:--
SQL:
SELECIONE A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE
DA TABELA 1,
(SELECIONE X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE
DE (SELECIONE NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND
DA TABELA 2
ONDE TO_CHAR(UPD_DATE,'AAAA/MM') = TO_CHAR(SYSDATE, 'AAAA/MM')) X,
(SELECIONE NUM, UPD_DATE, STOCK_ONHAND
DA TABELA 2
ONDE TO_CHAR(UPD_DATE,'AAAA/MM') =
TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'AAAA/MM') || '/01','AAAA/MM/DD') - 1, 'AAAA/MM') ) Y,
ONDE X.NUM = Y.NUM (+)
E X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B
ONDE A.NUM = B.NUM
ilustrar:--
SQL:
selecione * from studentinfo onde não existe (selecione * from student where studentinfo.id=student.id) e nome do departamento='"&strdepartmentname&"' e nome principal='"&strprofessionname&"' ordene por gênero, local de origem do aluno, faculdade total nota do exame de admissão
ilustrar:
Obtenha do banco de dados as estatísticas da conta telefônica de cada unidade durante um ano (cota da conta telefônica, parabéns, telegrama e lista de fertilizantes, fonte de duas tabelas)
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)) COMO MAIO,
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 (SELECIONE a.userper, a.tel, a.standfee, b.telfeedate, b.factration
DE TELFEESTAND a, TELFEE b
ONDE a.tel = b.telfax) a
GRUPO POR a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy')
Descrição: Problema de consulta conjunta de quatro tabelas:
SQL: selecione * de uma junção interna esquerda b em aa=bb junção interna direita c em aa=cc junção interna d em aa=dd onde .....
Descrição: Obtenha o menor número de ID não utilizado na tabela
SQL:
SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) como HandleID
DE Alça
ONDE NÃO HandleID IN (SELECT a.HandleID - 1 FROM Handle a)
2. Remova dados duplicados
1. O caso de ter uma chave primária
a. ID de campo exclusivo (chave primária exclusiva)
excluir tabela
onde id não está
(
selecione max(id) do grupo de tabelas por col1,col2,col3...
)
O campo após a cláusula group by é a condição que você usa para determinar a duplicação. Por exemplo, se houver apenas col1, desde que o conteúdo do campo col1 seja o mesmo, significa que os registros são os mesmos.
b.Ter uma chave primária conjunta
Suponha que col1+','+col2+','...col5 seja a chave primária conjunta
selecione * da tabela onde col1+','+col2+','...col5 em (
selecione max(col1+','+col2+','...col5) da tabela
onde tendo contagem(*)>1
agrupar por col1, col2, col3, col4
)
O campo após a cláusula group by é a condição que você usa para determinar a duplicação. Por exemplo, se houver apenas col1, desde que o conteúdo do campo col1 seja o mesmo, significa que os registros são os mesmos.
c: Julgue todos os campos
selecione * em #aa do grupo de tabelas por id1,id2,....
excluir tabela
inserir na tabela
selecione * de #aa
2. Situação sem chave primária
a: Implementado usando tabelas temporárias
selecione identidade(int,1,1) como id,* em #temp de ta
excluir #temp
onde id não está
(
selecione max(id) de # grupo por col1,col2,col3...
)
deletar tabela ta
inserido em ta(...)
selecione ..... de #temp
b: Implementado alterando a estrutura da tabela (adicionando um campo exclusivo)
alterar tabela tabela adicionar novo campo int identidade (1,1)
excluir tabela
onde newfield não está
(
selecione min (newfield) do grupo de tabelas por todos os campos, exceto newfield
)
alterar tabela tabela eliminar coluna newfield