|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2007
Messaggi: 9050
|
[SQL] selezionare attributi comuni a due tabelle
salve a tutti, una domanda:
ipotizzando di avere due tabelle A e B, entrambe sotto-tabelle (o tailoring expression) di una tabella R più grande, come faccio a selezionare solo gli attributi che queste tabelle hanno in comune in maniera automatizzata? è una domanda generica su SQL, quindi vi chiedo se si può fare mediante un insieme di query annidate, viste o altro, il linguaggio su cui vado a implementare sta cosa non mi è stato ancora detto (probabilmente c++ o java). un esempio: R(attr1, attr2, attr3, attr4.......attrn) A(attr1, attr2, attr3) B(attr3, attr4, attr5) c'è un modo per sapere in automatico che attr3 è l'attributo comune indipendentemente dal linguaggio? (chessò con join, union, intersect e chi più ne ha più ne metta) grazie in anticipo. |
|
|
|
|
|
#2 | |
|
Bannato
Iscritto dal: Apr 2006
Messaggi: 5857
|
Quote:
Codice:
SELECT
COLUMN_NAME
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME IN ('nomeTabA', 'nomeTabB')
GROUP BY
COLUMN_NAME
HAVING
COUNT(*) > 1
|
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Nov 2007
Messaggi: 9050
|
Quote:
quindi per capirci, column_name è l'attributo della vista information_schema.columns dove son memorizzati i nomi degli attributi di tutte le tabelle di tutto il database giusto? comunque sisi, essendo le due expression derivanti dalla stessa tabella di origine hanno gli attributi comuni con nome uguale, grazie mille ancora! edit, un'altra domanda, questa query va bene anche nel caso in cui voglio gli attributi in comune di due viste?oppure le viste vengono salvate da un'altra parte? Ultima modifica di Mr_Paulus : 03-03-2011 alle 10:39. |
|
|
|
|
|
|
#4 | |
|
Bannato
Iscritto dal: Apr 2006
Messaggi: 5857
|
Quote:
Su Sql Server la vista citata contempla anche le viste, su altri DB non saprei. Se usi questo codice: Codice:
SELECT
COLUMN_NAME,
COUNT(*) AS qtShares
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME IN ('nomeTabA', 'nomeTabB', 'nomeTabC', 'nomeVistaA', 'nomeVistaB')
GROUP BY
COLUMN_NAME
HAVING
COUNT(*) >= 1
qtShares (sempre maggiore o uguale a 1) ti indicherà su quante tabelle/viste è presente il tuo campo/attributo. Ossia un risultato tipo : Codice:
COLUMN_NAME, qtShares AttrA, 5 AttrB, 1 AttrC, 5 AttrD, 2 AttrE, 4 AttrF, 5 AttrH, 3
PS Ricorda che la vista citata cmq c'è su alcuni DBMS tipo MSSQL, MySQL, PostgreSQL ma non c'è su altri DBMS tipo Oracle ed Informix (dove si può fare lo stesso ma usando altre strade) Ultima modifica di FabryHw : 04-03-2011 alle 14:53. |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2007
Messaggi: 9050
|
ho capito, grazie mille per la spiegazione
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:09.




















