Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Insert + select
mercoledì 22 febbraio 2006 - 15.03
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
isotopo_1975
Profilo
| Newbie
10
messaggi | Data Invio:
mer 22 feb 2006 - 15:03
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
208
messaggi | Data Invio:
mer 22 feb 2006 - 15:37
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
10
messaggi | Data Invio:
mer 22 feb 2006 - 16:27
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'
Torna su
Stanze Forum
Elenco Threads
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 !