Insert + select

mercoledì 22 febbraio 2006 - 15.03

isotopo_1975 Profilo | Newbie

Ciao,

sto scrivendo un piccolo pezzo di codice sql. Ho un problema che non riesco a risolvere. Supponiamo che io crei una tabella mia_tabella con 3 campi: Nome, Cognome e num_tel

I valori li inserisco come select di altre tabelle, quindi con lo statement

insert mia_tabella
select nome,cognome,num_tel
from anagrafica

fin qui tutto ok...

ora io ho la necessità di inserire, sempre con una select, dei valori presi da 2 tabelle distinte... ossia
nome e cognome dalla tabella anagrafica, mentre num_tel dalla tabella elenco_tel.

Come faccio a direa a Mysql che la select sul num_tel va poi inserita nella colonna numero 3 e non nella numero 1?

In linee di codice il problema è:

create table mia_tabella
(nome varchar(30) not null,
cognome varchar(30) not null,
num_tel int not null)

insert mia_tabella
select nome,cognome
from anagrafica
where nome='mario' and cognome='rossi'

insert mia_tabella
select num_tel
from elenco_tel
where num_tel like 050367% /* esiste un solo num di telefono fatto così

Mi da 2 errori... nella prima insert dice che manca un valore, nella seconda invece il valore inserito è di tipo diverso a quello specificato e che ne mancano altri 2...

Qualcuno sa dirmi qualcosa?

Grazie mille


sanbiz Profilo | Senior Member

Prima di tutto una premessa: non so come mySQL si comporti, ma quello che ti sto postando è codice t-sql generico e dovrebbe funzionare.

Poi è necessaria una precisazione: prima di porseguire, chiarisciti bene le idee, perchè il codice che hai postato ha grossi buchi...

Ora torniamo a noi:

>Come faccio a direa a Mysql che la select sul num_tel va poi
>inserita nella colonna numero 3 e non nella numero 1?
Qui non ho più capito cosa stavi dicendo!


>Mi da 2 errori... nella prima insert dice che manca un valore,
>nella seconda invece il valore inserito è di tipo diverso a quello
>specificato e che ne mancano altri 2...
>
Beh, ha ragione, poichè se indichi nella create table "num_tel int not null" vuol dire che num_tel non accetta valori nulli e se poi fai una insert dove gli passi solo nome e cognome, come fa a riempire num_tel?

Nella seconda commetti lo stesso errore, poichè dimentichi Nome e Cognome e poi sbagli anche "num_tel like 050367% ": like è sui valori varchar() o Char() mentre num tel è int! Allora, o fai un cast come ti ho suggerito, o meglio ancora, cambi num_tel da int a varchar.
Attenzione che se mantieni INT il tuo numero NON sarà mai 050367... ma 50367... perchè lo zero iniziale non viene considerato nei valori numerici.


Allora, per ricapitolare ti posto il tuo esempio riveduto e corretto.


use tempdb

create table mia_tabella
(
nome varchar(30) not null,
cognome varchar(30) not null,
num_tel int not null
)

create table Anagrafica
(
nome varchar(30) not null,
cognome varchar(30) not null,
num_tel int not null
)

--La popolo
insert into Anagrafica (Nome, Cognome, num_Tel) Values('Mario', 'Rossi', 1)
insert into Anagrafica (Nome, Cognome, num_Tel) Values('Sandro', 'Bizioli', 2)
insert into Anagrafica (Nome, Cognome, num_Tel) Values('Paolo', 'Verdi', 3)

create table elencoTel
(
num_tel int not null
)
--La popolo
insert into elencoTel (num_Tel) Values(05036712)
insert into elencoTel (num_Tel) Values(06036712)
insert into elencoTel (num_Tel) Values(07036712)


insert into mia_Tabella
select
Nome,
Cognome,
(select num_tel
from elencotel
where cast(num_tel as varchar(20)) like '50367%'
) as Num_Tel
from Anagrafica
where nome = 'Mario' and Cognome = 'Rossi'

select * from mia_Tabella

--Elimino le tabelle
drop table mia_tabella
drop table Anagrafica
drop table ElencoTel



Un'ultima domanda: ma perchè la tabella anagraficha ha il campo num_tel quando tu lo vai a prendere da un'altra tabella?





--
Sandro Bizioli

isotopo_1975 Profilo | Newbie

Ciao,

Mi mancava questa informazione!!!! Non sapevo che si potesse fare una select dentro un'altra select!!! Per il cast non c'è problema... posso considerare il num di telefono come varchar :)

Invece il valore num_tel dentro anagrafica non lo dovevo mettere... mi sono sbagliato

Grazie Mille!!!!

Iso.


insert into mia_Tabella
select
Nome,
Cognome,

(select num_tel
from elencotel
where cast(num_tel as varchar(20)) like '50367%'
) as Num_Tel

from Anagrafica
where nome = 'Mario' and Cognome = 'Rossi'
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5