Salve ragazzi,
sto studiando per l'esame di basi di dati I e ho molti dubbi su una query che ho scritto.
Qualcuno potrebbe aiutarmi a capire?
Grazie in anticipo!
AUTORE (Orcid, Nome, Cognome, Affliazione)
LAVORO (Doi. Titolo, Tipo, Anno)
SCRIVE (Doi, Orcid, Ordine)
La tabella AUTORE contiene i dati dell'autore, il cui Orcid è l'identificativo.
La tabella LAVORO contiene tutti i lavori, in particolare Doi identificativo del lavoro, Titolo del lavoro, tipo di lavoro rivista o convegno, anno di scrittura.
Nella tabella SCRIVE si codifica l'associazione tra lavori e autori e l'attributo Ordine indica la posizione di un autore nella lista degli autori di un lavoro.
SCRIVERE UNA QUERY SQL che restituisce coppie di autori che abbiano scritto lavori insieme (se un autore è autore di un lavoro, anche l'altro lo è).
Ho provato a ragionare parafrasando la richiesta del'esercizio con l'utilizzo del NOT EXISTS: Restituisce coppie di autori di lavori in cui non esistono Orcid uguali nello stesso lavoro.
SELECT A1.Nome AS NomeAutore1, A1.Cognome AS CognomeAutore1 , A2.Nome AS NomeAutore2, A2.Cognome AS CognomeAutore2
FROM AUTORE A1, AUTORE A2
WHERE NOT EXISTS ( SELECT S.DOI
FROM SCRIVE S
WHERE NOT EXISTS(
SELECT L2.Orcid
FROM LAVORO l2
WHERE S.Doi=L1.Doi
AND L1.Orcid <> L2.Orcid;);
Ho molti molti dubbi, non riesco a ragionare e non riesco ad immaginarmi due copie di tabelle e come collegarle tra loro. Potreste aiutarmi a capire come devo ragionare per scrivere query di questa tipologia?
Grazie in anticipo per l'eventuale aiuto!