2017-09-30 8 views
-2

私はROOMと呼ばれるテーブルを持っています。参加を使用してSQLを選択

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 

また、SESSIONという表もあります。

BUILDINGNO「B2」に含まれていない、私はSESSION(ID、BUILDINGNOとROOMNO)の詳細が表示されている、JOINを使用してSELECT文を作成したいと思います
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 

とROOMCAPACITYは> 180結果でもある持っている必要があります重複する値を除外します。

私はステートメントを使用してみました:

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'; 

、それは非常に適切ではありませんが...誰かがこれをしてください修正する方法私を見るだろうか?

+0

「ROOMCAPACITY」のデータタイプは何ですか?あなたの問題は何ですか? – Ravi

+0

'BUILDINGNO'と' ROOMNO'カラムの両方でテーブルを結合する必要があります。 – MKR

+0

'CONSTRAINT SESSION_FK1 FOREIGN KEY(BUILDINGNO)REFERENCES BUILDING(BUILDINGNO)とは思えません。'(BUILDINGNO、ROOMNO) 'の両方の列に' SESSION_FK2'があるので、FKは大いに役立ちます。 – MKR

答えて

1

を使用する必要があります。 ROOMCAPACITYintであると仮定します。

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

あなたがBUILDINGNOROOMNO列の表をJOINする必要があり、全体の外部キー

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'; 
関連する問題