3

このクエリがあります。2番目の部分は正しい値を取得していますが、最終的な出力データには、列が選択からの値と等しい行が含まれています。

SELECT * 
FROM roomfacilities 
WHERE room <> '(SELECT room_assigned 
                FROM allocation 
                WHERE booking_id = 01010106)';

roomfacilitiesSELECT all from WHERE room'does notequal'はselectからの結果であると言って動作させようとしています。

助けてくれてありがとう。

4

2 に答える 2

4

NOT IN述語を使用します。

SELECT *
FROM roomfacilities 
WHERE room NOT IN(SELECT room_assigned 
                  FROM allocation 
                  WHERE booking_id = 01010106);

または: LEFT JOIN :

SELECT f.*
FROM roomfacilities f
LEFT JOIN allocation a  ON f.room       = a.room_assigned 
                       AND a.booking_id = 01010106
WHERE a.room_assigned IS NULL;
于 2013-02-18T13:50:13.670 に答える
3

を使用すると、 from tableの値が の場合、LEFT JOINtable からすべてのレコードを取得できます。roomfacilitiesroom_assignedallocationNULL

SELECT  a.* 
FROM    roomfacilities a
        LEFT JOIN allocation b
            ON a.room = b.room_assigned AND
               b.booking_id = 01010106
WHERE   b.room_assigned IS NULL
于 2013-02-18T13:50:51.313 に答える