2017-09-30 4 views
-2

Ich habe eine Tabelle namens ROOM.SQL-Auswahl mit Join

CONSTRAINT ROOM_PK PRIMARY KEY(BUILDINGNO,ROOMNO), 
CONSTRAINT ROOM_FK1 FOREIGN KEY(BUILDINGNO) REFERENCES BUILDING(BUILDINGNO)); 


BUILDINGNO | ROOMNO | ROOMCAPACITY 
-----------+--------+------------- 
B1   | R1  | 121 
B1   | R2  | 253 
B2   | R1  | 275 
B2   | R2  | 126 
B2   | R3  | 124 
B3   | R1  | 256  
B3   | R2  | 324 
B4   | R1  | 431 
B4   | R2  | 345 
B4   | R3  | 231 

Und auch eine Tabelle namens SESSION.

CONSTRAINT SESSION_PK PRIMARY KEY(SESSIONID), 
CONSTRAINT SESSION_FK1 FOREIGN KEY(BUILDINGNO) REFERENCES 
BUILDING(BUILDINGNO), 
CONSTRAINT SESSION_FK2 FOREIGN KEY(BUILDINGNO,ROOMNO) REFERENCES 
ROOM(BUILDINGNO,ROOMNO), 
CONSTRAINT SESSION_FK3 FOREIGN KEY(SPEAKERID) REFERENCES SPEAKER(SPEAKERID)); 


SESSIONID | BUILDINGNO | ROOMNO | SPEAKERID 
----------+------------+--------+---------- 
SS01  | B1   | R1  | S1 
SS02  | B2   | R1  | S2 
SS03  | B1   | R2  | S2 
SS04  | B4   | R2  | S4 
SS05  | B3   | R2  | S5 
SS06  | B3   | R1  | S5 
SS07  | B4   | R2  | S3 
SS08  | B1   | R2  | S2 
SS09  | B2   | R3  | S4 
SS10  | B4   | R1  | S3 

Ich mag würde eine SELECT-Anweisung erstellen mit JOIN, dass die Details SESSION (ID, BUILDINGNO und ROOMNO) angezeigt werden, die nicht in BUILDINGNO ‚B2‘ sind und die ROOMCAPACITY haben muss> 180 Ergebnisse auch sind um doppelte Werte auszuschließen.

Ich versuchte, die Anweisung zu verwenden:

SELECT DISTINCT CONFERENCESESSION.SESSIONID, CONFERENCESESSION.BUILDINGNO, CONFERENCESESSION.ROOMNO 
FROM CONFERENCESESSION 
INNER JOIN ROOM ON ROOM.ROOMNO=CONFERENCESESSION.ROOMNO 
WHERE CONFERENCESESSION.BUILDINGNO != 'B2' 
AND ROOM.ROOMCAPACITY >= '180'; 

aber es ist nicht ganz richtig ... jemand mir zeigen konnte, wie dieses Problem zu beheben, bitte?

+0

Was ist der Datentyp von 'ROOMCAPACITY'? und was ist dein Problem? – Ravi

+0

Sie sollten sowohl in den Spalten "BUILDINGNO" als auch in der Spalte "ROOMNO" der Tabelle beitreten. – MKR

+0

Ich glaube 'CONSTRAINT SESSION_FK1 FREMD KEY (BUILDINGNO) REFERENCES BUILDING (BUILDINGNO),' FK ist von großem Nutzen, da Sie 'SESSION_FK2' auf beiden Spalten (BUILDINGNO, ROOMNO)' 'haben. – MKR

Antwort

1

Sie verwenden müssen, um die Tabelle auf BUILDINGNO und ROOMNO Spalten JOIN. Angenommen ROOMCAPACITY ist int.

SELECT DISTINCT CS.SESSIONID, 
       CS.BUILDINGNO, 
       CS.ROOMNO 
FROM 
CONFERENCESESSION CS 
INNER JOIN 
ROOM R 
ON R.BUILDINGNO = CS.BUILDINGNO 
AND R.ROOMNO  = CS.ROOMNO 
WHERE 
CS.BUILDINGNO != 'B2' 
AND R.ROOMCAPACITY >= 180; 
1

Notwendigkeit, die gesamte Fremdschlüssel

SELECT DISTINCT CONFERENCESESSION.SESSIONID, CONFERENCESESSION.BUILDINGNO, CONFERENCESESSION.ROOMNO 
FROM CONFERENCESESSION 
INNER JOIN ROOM 
    ON ROOM.BUILDINGNO = CONFERENCESESSION.BUILDINGNO 
    ON ROOM.ROOMNO  = CONFERENCESESSION.ROOMNO 
AND CONFERENCESESSION.BUILDINGNO != 'B2' 
AND ROOM.ROOMCAPACITY >= '180';