Quiz query Access

sabato 20 gennaio 2007 - 12.27

saso Profilo | Newbie

Ciao a tutti,
sono un neofita di Access, maho un problema che dovrei risolvere per la lezionedi domani all'università.
Ho 2 tabelle formate entrambi da 5 record (formato testo o numero).

tabella 1 ( i record sono dei numeri progressivi 1,2,3,4,5)
tabella 2 ( i record sono dei numeri progressivi 1,4,6,8,9)

dovrei fare una query che mi estragga dalle 2 tabelle tutti i record ma presi una sola volta cioè:

1,2,3,4,5,6,8,9

infatti il record 1 e 4 vi sono in entrambi le tabelle.
Lo posso fare? c'è un modo anche in excel?

Grazie a tutti
Saso

lbenaglia Profilo | Guru

>sono un neofita di Access, maho un problema che dovrei risolvere
>per la lezionedi domani all'università.
>Ho 2 tabelle formate entrambi da 5 record (formato testo o numero).
>
>tabella 1 ( i record sono dei numeri progressivi 1,2,3,4,5)
>tabella 2 ( i record sono dei numeri progressivi 1,4,6,8,9)
>
>dovrei fare una query che mi estragga dalle 2 tabelle tutti i
>record ma presi una sola volta cioè:
>
>1,2,3,4,5,6,8,9
>
>infatti il record 1 e 4 vi sono in entrambi le tabelle.
>Lo posso fare?

Ciao saso,

puoi servirti dell'operatore UNION che permette di combinare le righe restituite da due o più query in un unico restult set.
Per combinare insieme i result sets restituiti dalle query tramite l'operatore UNION, occorre soggiacere a due regole fondamentali:

- Il numero e l'ordine delle colonne deve essere identico in tutte le query;
- I data type corrispondenti devono essere compatibili (ovvero implicitamente castabili);

Se non si specifica l'argomento ALL, verranno automaticamente eliminate le righe doppie, come nel seguente esempio:

USE tempdb; CREATE TABLE Numbers1( Number int NOT NULL ); CREATE TABLE Numbers2( Number int NOT NULL ); INSERT INTO Numbers1 VALUES(1); INSERT INTO Numbers1 VALUES(2); INSERT INTO Numbers1 VALUES(3); INSERT INTO Numbers1 VALUES(4); INSERT INTO Numbers1 VALUES(5); INSERT INTO Numbers2 VALUES(1); INSERT INTO Numbers2 VALUES(4); INSERT INTO Numbers2 VALUES(6); INSERT INTO Numbers2 VALUES(8); INSERT INTO Numbers2 VALUES(9); SELECT Number FROM Numbers1 UNION SELECT Number FROM Numbers2 ORDER BY Number /* Output: Number ----------- 1 2 3 4 5 6 8 9 (8 row(s) affected) */ DROP TABLE Numbers1, Numbers2;

> C'è un modo anche in excel?
Sicuramente si ma passo la palla

>Grazie a tutti
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

alx_81 Profilo | Guru

>Ciao a tutti,
Ciao!

>sono un neofita di Access, maho un problema che dovrei risolvere
>per la lezionedi domani all'università.
>Ho 2 tabelle formate entrambi da 5 record (formato testo o numero).
>
>tabella 1 ( i record sono dei numeri progressivi 1,2,3,4,5)
>tabella 2 ( i record sono dei numeri progressivi 1,4,6,8,9)
>
>dovrei fare una query che mi estragga dalle 2 tabelle tutti i
>record ma presi una sola volta cioè:
>
>1,2,3,4,5,6,8,9
>
>infatti il record 1 e 4 vi sono in entrambi le tabelle.
>Lo posso fare?
Sì puoi farlo, ma siccome sono 2 tabelle, devi fare l'unione con l'operatore UNION
Ad esempio

select numero from tabella1
UNION
select numero from tabella2

UNION, oltre che unire le due tabelle, ti ricava una ed una sola volta i record.
ciao!


>
>Grazie a tutti
Di nulla!

> Saso

Alx81 =)

http://blogs.dotnethell.it/suxstellino

saso Profilo | Newbie

Grazie davvero per le celeri risposte. Mi avevano parlato infatti molto bene di questo forum..
Scusate ragazzi però sono veramente inetto. Una volta che creo le tabelle in access, cosa devo fare?
Son davvero ignurant ! domani ho questa esercitazione e sono nel panico !!
aiuatemi
Saso

lbenaglia Profilo | Guru

>Scusate ragazzi però sono veramente inetto. Una volta che creo
>le tabelle in access, cosa devo fare?

Le popoli (ovvero "ci butti dentro" i dati) visualizzandole in modalità Datasheet (doppio click sulla tabella) dopo di che scrivi una nuova query:

- Seleziona Queries
- Premi il bottone New
- Seleziona Design View
- Aggiungi le due tabelle selezionandole e premendo Add dopo di che premi Close per chiudere la finestra Show Table
- Seleziona il menu View -> SQL View (oppure seleziona l'omonima visualizzazione tramite il primo bottone della toolbar)
- Scrivi la query (eventualmente prendendo spunto dalle nostre soluzioni)
- Eseguila premendo il bottone Run (identificato dal punto escalamtivo rosso, oppure dal menu Query -> Run).

>Son davvero ignurant ! domani ho questa esercitazione e sono
>nel panico !!
Io ti suggerirei di dare una bella lettura all'help in linea di Access e di studiare un pochino in questo week-end

In bocca al lupo.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

marcovivio Profilo | Expert

Bisogna vedere qual'è il legame che lega le due tabelle per poi impostare nella query di selezione una 'where' che filtri in modo corretto i record.
Se le due tabelle sono identiche come struttura ed hanno dei record uguali puoi fare una select distinct...
Ciao ciao
MV

Krashnet Profilo | Newbie

hehe io ho lo stesso problema SELECT DISTINCT FROM PIU TABELLE
Solo ke non conoscendo i numi della tebelle le passo con una variabile quindi

sql="SELECT distinct MARCA from "& rsCataloghi("CATALOGO") &" "

Ma nel risultato ottengo effettivamente il DISTINCT del campo MARCA sia del primo ke del secondo catalogo
PROBLEMA: ME LI MOSTRA SEPARATAMENTE.... invece dovrebbe mostrare il risultato DISTINCT unendo i risultati del primo e del secondo catalogo...

[OTTENGO]
(dal catalogo1)
ALFA
AUDI
HONDA

(dal catalogo2)
ALFA
HONDA
ASAUBARU


[INVECE DOVREI OTTENERE]
(dal catalogo1 + catalogo2)
ALFA
AUDI
HONDA
SUBARU




==============================================================
IL CODICE INCRIMINATO è IL SEGUENTE

<SCRIPT LANGUAGE=javascript> function invia() { document.form.submit(); } </SCRIPT> <form name="form" method="post" action="combo2.asp"> <p align="center"><select size="1" name="MARCA" onChange="invia()"> <option><----scelga la marca----></option> <% 'Definisco i cataloghi dove cercare Dim strSearch set rsCataloghi=ConnShop002.execute ("SELECT CATALOGO FROM cataloghi ORDER by catalogo desc") while not rsCataloghi.eof %> <% 'EFFETTUO LA RICERCA NEI CATALOGHI sql="SELECT DISTINCT MARCA from "& rsCataloghi("CATALOGO") &" " set rs=server.createobject("adodb.recordset") rs.open sql, ConnShop002, 1, 3 %> <% Set Rs = ConnShop002.Execute(SQL) While Not rs.EOF%> <option><%=RS("MARCA")%></option> <% rs.MoveNext Wend %> <% rsCataloghi.movenext wend %> </select> </form> <div align="center"> <% rs.close 'ConnShop002.close set rs=nothing 'set ConnShop002=nothing %>


E come la risolviamo?!?!

Hehehe negli altri forum (così detti importantio) non ho cavato un ragno dal buko
ma qui vedo ke c'è ki va oltre UNIN SELECT

Se avete tempo provate a buttarci un okkio?

Grazzie a tutti!

lbenaglia Profilo | Guru

>Ma nel risultato ottengo effettivamente il DISTINCT del campo
>MARCA sia del primo ke del secondo catalogo
>PROBLEMA: ME LI MOSTRA SEPARATAMENTE.... invece dovrebbe mostrare
>il risultato DISTINCT unendo i risultati del primo e del secondo
>catalogo...
...
>set rsCataloghi=ConnShop002.execute ("SELECT CATALOGO FROM cataloghi
>ORDER by catalogo desc")
>while not rsCataloghi.eof
>%>
>
><%
>'EFFETTUO LA RICERCA NEI CATALOGHI
>sql="SELECT DISTINCT MARCA from "& rsCataloghi("CATALOGO") &"
>"
>set rs=server.createobject("adodb.recordset")
>
>rs.open sql, ConnShop002, 1, 3
>%>
><%
>
>Set Rs = ConnShop002.Execute(SQL)
>While Not rs.EOF%>
>
>
><option><%=RS("MARCA")%></option>
><%
>rs.MoveNext
>Wend
>%>
><%
>rsCataloghi.movenext
>wend
>%>

Ciao Krashnet,

la prima query recupera i cataloghi, li cicli, e per ogni catalogo esegui una query scrivendo il contenuto della colonna Marca in una <select>.
Se più cataloghi contengono più marche capisci anche tu che verranno duplicate...

L'errore di fondo della tua soluzione risiede nella base dati. Per quale motivo hai definito una tabella per catalogo?
Purtroppo con una base dati del genere, l'unica soluzione che mi viene in mente è quella di costruire dinamicamente il comando SQL mettendo in UNION le varie SELECT dei cataloghi, eseguendo alla fine del loop una SINGOLA query.
La soluzione oltre ad essere macchinosa ed inefficiente può anche essere soggetta ad attacchi di SQL Injection (basterebbe ad esempio forzare un nome di catalogo inserendo dei comandi SQL di DROP, ALTER, DELETE, UPDATE, ecc...).

In alternativa potresti popolare una tabella di appoggio con le marche dei cataloghi in esame ed alla fine seguire una SELECT DISTINCT su tale tabella, ma anche questo sarebbe solo un "cerotto" ad una soluzione pensata male in partenza.

>Grazzie a tutti!
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Krashnet Profilo | Newbie

Ciao...

Infatti io faccio una query sulla tabella "CATALGHI" (nella quale ho inserito il nome delle tabelle dalle quali devo otenere i risultati...
quindi...

1) Faccio una query sulla tabella CATALOGHI e ottengo

SPARCO
SIMONI
BMC
EXTREME

E poi le racchiudo tutte in una variabile...

"& rsCataloghi("CATALOGO") &"

Quindi pensavo di poter fare una "SELECT DISTINCT MARCA FROM "& rsCataloghi("CATALOGO") &" "
per ottenere una lista "distinct" di tutte le marche prensenti nei vari cataloghi, senza doppioni.....

M a forse sono fuori strada.... (nuovamente)....

NON SO PROPRIO COME FARE....


(Il perkè di tutto ciò è ke avendo + di 25.000 prodotti, mi viene difficoltoso gestirli tutti in una tabella unica e ho deciso di dedicare a d ogni marca trattata una tabella propria.... dato che in futuro ne aggiungerò altre e non vorrei rimettere mano al codice)

Avete qualke soluzione da consigliarmi?
Scripto in ASP su db Access

lbenaglia Profilo | Guru

>Quindi pensavo di poter fare una "SELECT DISTINCT MARCA FROM
>"& rsCataloghi("CATALOGO") &" "
>per ottenere una lista "distinct" di tutte le marche prensenti
>nei vari cataloghi, senza doppioni.....

La distinct agisce sulla SINGOLA QUERY!!!
Tu esegui 1 query per ogni catalogo, quindi non potrai mai avere la distinct delle marche di tutti i cataloghi.
Le uniche due alternative che mi vengono in mente te le ho elencate nella precedente risposta...

>(Il perkè di tutto ciò è ke avendo + di 25.000 prodotti, mi
>viene difficoltoso gestirli tutti in una tabella unica e ho deciso
>di dedicare a d ogni marca trattata una tabella propria.... dato
>che in futuro ne aggiungerò altre e non vorrei rimettere mano
>al codice)
25.000 righe sono un niente per un DBMS...

>Avete qualke soluzione da consigliarmi?
Già fatto nella precedente risposta.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Krashnet Profilo | Newbie

M.... non è ke mi allungheresti un esempio?
(ormai sono cosi assuefatto da sta roba e nn vedo al di la del kodice ke continuo a riscirvere)
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