Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 28-02-2011, 15:44   #1
Mr_Paulus
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.
Mr_Paulus è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2011, 18:45   #2
FabryHw
Bannato
 
Iscritto dal: Apr 2006
Messaggi: 5857
Quote:
Originariamente inviato da Mr_Paulus Guarda i messaggi
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.
Non ho ben capito cosa vuoi fare ma se gli attributi sono UGUALI in base al loro nome e se il confronto lo fai sempre 2 tabelle alla volta allora con questa query ottieni l'elenco degli attributi in comune:
Codice:
SELECT 
	COLUMN_NAME
FROM 
	INFORMATION_SCHEMA.COLUMNS
WHERE
	TABLE_NAME IN ('nomeTabA', 'nomeTabB')
GROUP BY
	COLUMN_NAME
HAVING
	COUNT(*) > 1
Le viste INFORMATION_SCHEMA sono presenti (ed in teoria simili se non uguali) su molti DB Server, quindi quello è in teoria un codice portabile tra vari DBMS (tranne alcuni però e tra gli esclusi pare sia compreso Oracle)
FabryHw è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2011, 09:28   #3
Mr_Paulus
Senior Member
 
Iscritto dal: Nov 2007
Messaggi: 9050
Quote:
Originariamente inviato da FabryHw Guarda i messaggi
Non ho ben capito cosa vuoi fare ma se gli attributi sono UGUALI in base al loro nome e se il confronto lo fai sempre 2 tabelle alla volta allora con questa query ottieni l'elenco degli attributi in comune:
Codice:
SELECT 
	COLUMN_NAME
FROM 
	INFORMATION_SCHEMA.COLUMNS
WHERE
	TABLE_NAME IN ('nomeTabA', 'nomeTabB')
GROUP BY
	COLUMN_NAME
HAVING
	COUNT(*) > 1
Le viste INFORMATION_SCHEMA sono presenti (ed in teoria simili se non uguali) su molti DB Server, quindi quello è in teoria un codice portabile tra vari DBMS (tranne alcuni però e tra gli esclusi pare sia compreso Oracle)
hai capito benissimo e ti ringrazio

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 09:39.
Mr_Paulus è offline   Rispondi citando il messaggio o parte di esso
Old 04-03-2011, 02:40   #4
FabryHw
Bannato
 
Iscritto dal: Apr 2006
Messaggi: 5857
Quote:
Originariamente inviato da Mr_Paulus Guarda i messaggi
hai capito benissimo e ti ringrazio

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?
Column_name è il nome del campo della tabella o vista e nel tuo caso il nome del campo coincide con un attributo.
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
Puoi fare gli incroci su più di 2 tabelle/viste contemporaneamente.
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
ottenuto su una lista di 5 tabelle/viste significherà
  • Attributi A, C e F presenti su tutte le tabelle/viste
  • Attributi B non condiviso, presente solo su una tabella
  • Attributo G non presente su nessuna tabella (beh questo la query in realtà non te lo dice lo capisci solo da un un buco di numerazione)
  • Attributi D, E e H presenti su più tabelle ma non su tutte.
    La query non ti dice però in nomi delle tabelle ed andrebbe ulteriormente migliorata, nel confronto 2 tabelle alla volta cmq il problema non sussiste.

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 13:53.
FabryHw è offline   Rispondi citando il messaggio o parte di esso
Old 04-03-2011, 09:49   #5
Mr_Paulus
Senior Member
 
Iscritto dal: Nov 2007
Messaggi: 9050
ho capito, grazie mille per la spiegazione
Mr_Paulus è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
Speciale TV in offerta su Amazon: Hisens...
Non c'è pace per Trezor: 347.000 e-mail ...
È un portatile Dell e li vale tut...
Apple iPhone 17 Pro Max 256GB a 1.195€ (...
GPT-6 Astra è davvero AGI o non s...
LG OLED G6S 48'' a 845€ e G6 55'' a 1368...
Mantax Otax: il malware Android che crip...
Musk incassa un altro maxi contratto IA:...
Le vendite di EV sono esplose in tutto i...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 23:06.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v