SQL: esiste il costrutto "is in"??

Giannis

Nuovo Utente
16 Nov 2005
16
0
0
Salve, sono di nuovo io.
Ho un problema con un database, per un comando SQL che pensavo esistesse...
Ho una tabella "chiamate" in cui esiste un campo "IDCLIENTE" chiave della tabella clienti.

Come posso selezionare tutti e solo i clienti il cui IDCLIENTE è presente nella tabella "chiamate"? Esiste insomma un costrutto del tipo Select * FROM clienti WHERE IDCLIENTE IS IN chiamate ???

Non ditemi che mi devo scansionare tutta la tabella delle chiamate!

Grazie
Gianni
 

lukeonweb

Utente Attivo
5 Mar 2003
5.177
10
38
43
Napoli
www.lucaruggiero.it
Non mi è chiarissima la struttura delle due tabelle, comunque presuumo che la chiamante abbia un campo di riferimento nella seconda, quindi non vedo il problema. Puoi usare l'istruzione IN (trovi un articoli nella sezione database/sql/tutorial) ma userei il classico filtro WHERE come nell'esempio che ti faccio

SELECT * FROM clienti WHERE idcliente = 1

Probabilmente non è la soluzione... se è cosi indicami la struttura delle due tabelle, tipi di dato e potenziali valori.

:byebye:
 

Giannis

Nuovo Utente
16 Nov 2005
16
0
0
provo a spiegarmi meglio

Allora, provo a spiegarmi meglio:
la tabella "Clienti" ha un campo "IDCliente", che la sua chiave primaria, una stringa in formato '000001'.
La tabella "Chiamate" ha anch'essa un campo "IDCliente" che è la chiave esterna (si chiama così?) che collega ogni chiamata a un cliente ed ha lo stesso formato.
In questo modo da una chiamata posso risalire al relativo cliente, come mi hai fatto notare con l'esempio.

Il mio problema è un altro: Voglio fare una SELECT sulla tabella CLIENTI, selezionando solo i clienti che corrispondono alle chiamate nella tabella delle chiamate (escludendo tutti gli altri).

In altre parole: voglio fare un database di backup in cui mettere solo le chiamate che corrispondono ad alcuni criteri e soltanto i clienti a cui si riferiscono...

Ce la facciamo? :confused:

Grazie
Gianni
 

Giannis

Nuovo Utente
16 Nov 2005
16
0
0
Grazie!

Credo di aver capito... grazie!
...quindi se dovessi creare una seconda tabella clienti uguale alla prima come struttura ma solo con i clienti che seleziono, bastera eseguire

SELECT DISTINCT Cliente.CodiceCliente, Cliente.Indirizzo, Cliente.Nome
INTO TabellaDiDestinazione
FROM Clienti, Chiamate
WHERE Chiamate.CodiceCliente = clienti.CodiceCliente

Basta fare questo?

Giannis
 

lukeonweb

Utente Attivo
5 Mar 2003
5.177
10
38
43
Napoli
www.lucaruggiero.it
INTO?

Scusa ma allora la struttura del database non l'ho capita, ho idea che ci stiamo solo incartando... :)

Esplicati caro, posta i campi dele tabelle che ti interessano

:byebye:
 

Giannis

Nuovo Utente
16 Nov 2005
16
0
0
Vuoto il sacco

Scusami tanto, credevo fosse una cosa secondaria... ora ti spiego veramente tutto:
ho un database, in cui ho una tabella principale CHIAMATE, con i seguenti campi:
-CodiceChiamata
-Ora
-Oggetto
-urgenza
-codiceCliente
etc etc...

Poi ho una tabella CLIENTI:
-CodiceCliente (uguale a quello delle chiamate)
-Nome
-Indirizzo
-telefono
etc etc.

ORA: attraverso alcune procedure, voglio fare una copia di backup del database (attraverso una SELECT INTO) in cui inserire tutte le chiamate di un anno (ad esempio il 2005) in una tabella CHIAMATE con la stessa struttura ma in un altro file, e questo è facile farlo con un controllo sulla data.
POI - e questo è quello che mi chiedevo - vorrei fare lo stesso lavoro con la tabella CLIENTI, inserendo nel database di backup solo i clienti che hanno almeno una chiamata nel 2005 (e il cui codice quindi compare nella tabella delle chiamate che ho appena copiato nella nuova tabella CHIAMATE).

Mi sono spiegato? :confused:

Comunque grazie!

Gianni
 

lukeonweb

Utente Attivo
5 Mar 2003
5.177
10
38
43
Napoli
www.lucaruggiero.it
si è più chiaro :) ti do solo un consiglio, quando crei delle tabelle usa il prefisso del nome della tabella stessa per i campi, ad esempio, tabella clienti, campi cli_id, cli_nome, etc... in modo da non avere problemi in fase di richiamo con ado

ci ho scritto un articolo in merito, che però vedo che non è stato ancora pubblicato... lo troverai prima o poi qui

https://www.mrw.it/tutorial/sql/

intanto leggi questo che spiega come fare il backup delle tabelle, qualora ne avessi bisogno

https://www.mrw.it/tutorial/sql/tutorial330.htm

veniamo al tuo quesito

SELECT * FROM
CHIAMANTE, CLIENTI
WHERE
CHIAMANTE.CodiceCliente = CLIENTI.CodiceCliente

se hai bisogno di ulteriori filtri li imposti, ma dovrebbe bastare da sola

poi prendi i risultati e li copi nella tabella di backup

almeno io farei cosi

che interfaccia usi per il database?
 

Giannis

Nuovo Utente
16 Nov 2005
16
0
0
Interfaccia? sto utilizzando MS ACCESS 2000...

Se ho capito bene, realizzo il backup dei CLIENTI in due colpi anziché in uno solo: prima faccio la join che mi hai detto, poi dalla tabella risultante estraggo solo i campi relativi al cliente...

...non è che questo poi comporta un altro problema? Cioè: nella tabella join, sicuramente avrò due campi uguali (le due chiavi del cliente) che quindi il sistema mi rinominerà come
Chiamate_CodCliente e Clienti_CodCliente.
Quello che sceglierò per copiarlo sul database di backup mi manterrà lo stesso nome, facendo saltare tutti i riferimenti a quel campo nel DB di Backup... mi sono capito? :)

Ho letto il tuo articolo, grazie. Comunque corrisponde a quello che pensavo di fare, il mio problema sono i filtri...
 

lukeonweb

Utente Attivo
5 Mar 2003
5.177
10
38
43
Napoli
www.lucaruggiero.it
Pardon, pensavo che usassi Access da ASP o VB :)

Allo scopo ti ho suggerito come impostare i nomi dei campi, è scomodo sotto certi aspetti, ma ti salva la vita in casi come quello che hai adesso.

Invece di effettuare il backup puoi effettuare una INSERT in una tabella creata a mano ad hoc, in modo che i campi te li gestisci tu e non demandi all'MDB il compito nativo di prendere i dati e copiarli.

Mi spiego?

:byebye:
 

Dusy

Utente Attivo
8 Nov 2005
488
0
0
Germania - Deutschland
lukeonweb ha scritto:
SELECT * FROM
CHIAMANTE, CLIENTI
WHERE
CHIAMANTE.CodiceCliente = CLIENTI.CodiceCliente

C'eravamo quasi...

SELECT
*
INTO
Nuova_Tabella
FROM
CHIAMANTE, CLIENTI
WHERE
CHIAMANTE.CodiceCliente = CLIENTI.CodiceCliente


In questo modo i risultati della tua query vengono salvati nella
tabella di backup =>Nuova_Tabella
Spero sia questo ciò che volevi fare... :byebye:
 

Giannis

Nuovo Utente
16 Nov 2005
16
0
0
Grazie infinite per il tuo aiuto, mi hai salvato... :fonzie:

Comunque ho trovato una strada per arrivarci "quasi" in un colpo solo che trascrivo per completezza:

SELECT DISTINCT Clienti.*
INTO TabellaBackupClienti
FROM Chiamate, Clienti
WHERE Chiamate.CodiceCliente = Clienti.CodiceCliente


Poi mi è bastato Esportare la tabella nel database di backup chiamandola di nuovo "Clienti", e il gioco è fatto.

Non mi sono azzardato a provare a fare anche il trasferimento in un colpo solo con la INTO IN, ma credo si possa fare...

Grazie di nuovo, e - già che ci siamo - buon 2006! :beer:

Gianni

PS: Grazie e auguri anche a Dusy!
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
J Php ajax sql controllare se l'id esiste in una tabella db PHP 2
B Stringa sql per ricerca su più campi Database 1
L Interfaccia grafica per gestire sql server .NET Framework 1
L Front-end SQL server Database 0
W Query SQL Classic ASP 2
R Filtro multiplo di selezione Sql PHP 2
Emix Select concatenate php sql ajax PHP 2
C Estrarre dati stringa Sql Database 1
W Mandare a capo valore di SQL Classic ASP 2
G non riesco a capire quale sia l'errore [SQL] MySQL 2
M modificare un file .XML da database Sql PHP 13
M Update con condizione SQL PHP 7
Alex_70 sql importazione dati MySQL 0
Tommy03 Algoritmo classifica SQL MySQL 0
L form multipla php sql,errore in inserimento MySQL 0
L Insert php sql da una form multipla PHP 6
moustache [RISOLTO] SQL PHP IIS PHP 8
WebmasterFioriniAndrea SQL, PHP Come passo i dati da una tabella? PHP 1
S Istruzione sql valori "simili" PHP 7
WebmasterFioriniAndrea [MySQL] sql attributi con nome uguale MySQL 0
D [MySQL] [PHP] SQL andare da capo MySQL 0
felino [Wordpress][WooCommerce] Ripristino ordini da file .sql WordPress 0
A [PHP] registrazione utente in un database sql con confronto PHP 1
S elimina record sql asp classic Classic ASP 5
M [MySQL] CREARE UN LINK SU UN DETERMINATO CAMPO DI UNA TABELLA RISULTATO DI UNA QUERY SQL MySQL 3
M leggere con jquery/ajax in una function javascript record di database sql server Javascript 0
G sql select con array in php PHP 1
B [Visual Basic] Passaggio variabili da un progetto all'altro (Visual Studio 2017 C#/SQL) Visual Basic 0
trattorino [PHP] sql estrarre in base all'ultima visita PHP 4
S SQL, ACCESS & ASP CLASSIC - QUERY Classic ASP 3
A [PHP] Modifica caratteri di una query Oracle SQL PHP 0
P [Visual Basic] access sql estrarre id vendite x cli e articolo con data maggiore del recordset Visual Basic 2
trattorino [PHP] sql aggiungere dato in una tabella senza cancellare contenuto PHP 6
P [MySQL] MODELLO ER, XAMPP E HEIDI SQL MySQL 0
V [MySQL] You have an error in your SQL syntax MySQL 1
Merlina3377 php insert dati su tabella sql PHP 9
G [MySQL] Errore importazione tabella .sql #1062 - Duplicate entry '592' for key 'PRIMARY' MySQL 20
A Retribuito: Sviluppatore Asp classico esperto in sicurezza webserver IIS e SQL Offerte e Richieste di Lavoro e/o Collaborazione 0
N [Java] codice per inserimento sql Java 0
V [PHP] Estrazione con SQL PHP 1
G albero categorie articolo sql Database 4
K [ASP.Net] Problema stampa e modifica ms sql ASP.NET 0
K stampa e modifica tabella in php e ms sql PHP 2
G [PHP] Selezionare OGGI anno precedente per query sql PHP 2
daniele8808 [MySQL] SQL SELECT restituisce più valori del dovuto MySQL 2
K Range orario ASP e SQL Classic ASP 4
S Select Concatenate Ajax, php, sql Presentati al Forum 16
giancadeejay [PHP] istruzione UPDATE SQL PHP 2
WebDr [ASP] Da una stringa a una data per SQL Classic ASP 2
M PHP/SQL Inserire più valori in una colonna di tipo integer - Checkbox - PHP 3

Discussioni simili