2016-12-11 8 views
-2

Ich möchte PROJECT_ID, STAFF_ID, hardware_id und SOFTWARE_ID wählen, die alle in einer Tabelle AUFGABEN verbunden sind, aber ich möchte, dass Link zeigen, während auch in der jeweiligen Tabelle auf die entsprechende ID (zB STAFF_NAME, JOB_TYPE verknüpft alle Attribute zeigt, JOB_GRADE aus der Tabelle STAFF). Hier ist mein Code:Wie kann ich mehrere Werte aus vielen Tabellen auswählen?

CREATE TABLE PROJECT 
(PROJECT_ID CHAR(5) NOT NULL, 
PROJECT_NAME CHAR(20), 
PROJECT_TYPE CHAR(20), 
START_DATE DATE, 
END_DATE DATE, 
PRIMARY KEY (PROJECT_ID)); 

CREATE TABLE HARDWARE 
(HARDWARE_ID CHAR(5) NOT NULL, 
HARDWARE_NAME CHAR(20), 
PRIMARY KEY (HARDWARE_ID)); 

CREATE TABLE SOFTWARE 
(SOFTWARE_ID CHAR(5) NOT NULL, 
SOFTWARE_NAME CHAR(20), 
PRIMARY KEY (SOFTWARE_ID)); 

CREATE TABLE STAFF 
(STAFF_ID CHAR(5) NOT NULL, 
STAFF_NAME CHAR(20), 
JOB_TYPE CHAR(20), 
JOB_GRADE CHAR(20), 
PRIMARY KEY (STAFF_ID)); 

CREATE TABLE ASSIGNMENTS 
(ASSIGNMENT_ID CHAR(5) NOT NULL, 
PROJECT_ID CHAR(5), 
STAFF_ID CHAR(5), 
HARDWARE_ID CHAR(5), 
SOFTWARE_ID CHAR(5), 
PRIMARY KEY (ASSIGNMENT_ID), 
FOREIGN KEY (PROJECT_ID) REFERENCES PROJECT(PROJECT_ID), 
FOREIGN KEY (STAFF_ID) REFERENCES STAFF(STAFF_ID), 
FOREIGN KEY (HARDWARE_ID) REFERENCES HARDWARE(HARDWARE_ID), 
FOREIGN KEY (SOFTWARE_ID) REFERENCES SOFTWARE(SOFTWARE_ID)); 

Hier ist einige Basisdaten:

INSERT INTO PROJECT (PROJECT_ID, PROJECT_NAME, PROJECT_TYPE, START_DATE, END_DATE) 
VALUES ('B0001','BIKESHOP.COM','WEB DEVELOPMENT',TO_DATE('15/01/17','DD/MM/YY'),TO_DATE('15/02/17','DD/MM/YY')); 

INSERT INTO HARDWARE (HARDWARE_ID, HARDWARE_NAME) 
VALUES ('H0001','WEBDEV PC1'); 

INSERT INTO SOFTWARE (SOFTWARE_ID, SOFTWARE_NAME) 
VALUES ('S0001','COFFEECUP IDE'); 

INSERT INTO STAFF (STAFF_ID, STAFF_NAME, JOB_TYPE, JOB_GRADE) 
VALUES ('ST001','JOHN MASON','WEB DEVELOPER','1'); 

INSERT INTO ASSIGNMENTS (ASSIGNMENT_ID, PROJECT_ID, STAFF_ID, HARDWARE_ID, SOFTWARE_ID) 
VALUES ('A0001','B0001','ST001','H0001','S0001'); 

Wie ich alle Attribute SELECT kann von allen zu einem einzigen PROJECT_ID verknüpften Tabellen zum Beispiel zeigen:

PROJECT_ID, PROJECT_NAME, PROJECT_TYPE, START_DATE, END_DATE, STAFF_ID, STAFF_NAME, JOB_TYPE, JOB_GRADE, HARDWARE_ID, HARDWARE_NAME, SOFTWARE_ID, SOFTWARE_NAME 
as one row, all linked to PROJECT_ID = 'B0001'. 
+1

Ist das nicht die gleiche Frage, die Sie vor 1 Stunde gepostet haben? – Aleksej

+0

Es ist zwar etwas aktualisiert, um es klarer zu machen. Entschuldigung für das Duplikat, ich habe noch nicht ganz verstanden, wie man es aus den Antworten der vorherigen Frage macht. – JadstaSeven

+2

Wenn eine Antwort auf eine Frage nicht klar ist, fügen Sie einen Kommentar zu der Antwort für einige Präzisierungen zu fragen, oder einfach für ein klareres man warten. Die doppelte Frage zu stellen ist nicht der richtige Weg. Da Sie eine Antwort hier akzeptiert haben, schließen Sie bitte die andere Frage. – Aleksej

Antwort

0

Ich bekomme es, Sie brauchen die genaue Abfrage für Sie geschrieben. Hier gehts:

select p.*, 
    s.*, 
    h.*, 
    sf.* 
from assignments a 
inner join staff s on a.staff_id = s.staff_id 
inner join software sf on a.software_id = sf.software_id 
inner join hardware h on a.hardware_id = h.hardware_id 
inner join project p on a.project_id = p.project_id 
where a.project_id = 'A0001'; 
+0

Danke! My SQL Developer funktioniert nicht richtig jetzt, so kann ich nicht, wenn es für mich gearbeitet, aber ich könnte mir vorstellen, es tut, ich werde so schnell wie möglich überprüfen. – JadstaSeven

+0

Diese Lösung ist genau das, wonach das OP gefragt hat. Allerdings ist es erwähnenswert, dass die Projektion doppelte Spalten enthalten wird ('Zuweisungen staff_id' und' staff.staff_id', etc). Es gibt keine Möglichkeit, eine solche Duplizierung zu vermeiden, außer durch explizite Benennung von Spalten in der Projektion (was ohnehin gut ist). – APC

Verwandte Themen