1

次のような SQL クエリにレイヤーを追加しようとしています。

SELECT 
  COUNT(*) totalCount 
FROM 
  ts_room 
WHERE 
  NOT EXISTS (
    SELECT 1
    FROM ts_roompref 
      JOIN ts_request 
      ON ts_roompref.request_id = ts_request.id
      AND day_id = 1 
      AND period_id = 1
    WHERE 
      ts_room.id = ts_roompref.room_id)

私がやりたいことは、一致する request.id の行が ts_allocation というテーブルに存在しないことを確認することです。これは私がこれまでに試みたものですが、うまくいかないようです:

SELECT 
  COUNT(*) totalCount 

FROM 
  ts_room 

WHERE 
  NOT EXISTS (
    SELECT 1
    FROM ts_roompref 
      JOIN ts_request 
      ON ts_roompref.request_id = ts_request.id
      AND day_id = 1 
      AND period_id = 1
    WHERE 
      ts_room.id = ts_roompref.room_id)

AND NOT EXISTS (
    SELECT 1
    FROM ts_roompref 
      JOIN ts_allocation
      ON ts_roompref.request_id = ts_allocation.request_id
      AND ts_allocation.status = "Allocated" 
    WHERE 
      ts_room.id = ts_roompref.room_id)
  )

何か案は?SQL Fiddle をここに含めました: http://sqlfiddle.com/#!2/4540d/2

4

1 に答える 1

1

問題はエイリアスの使用に関係していると思います:クエリのテーブルにエイリアス名を追加すると、クエリが実行され、いくつかの値が返されました(変更された sqlfiddle へのリンク):

SELECT COUNT(*) totalCount 
FROM ts_room rm
WHERE 
NOT EXISTS (
    SELECT 1
    FROM ts_roompref rp
    JOIN ts_request rq ON rp.request_id = rq.id AND day_id = 1 AND period_id = 1
    WHERE rm.id = rp.room_id)
AND NOT EXISTS (
    SELECT 1
    FROM ts_roompref rp
    JOIN ts_allocation a ON rp.request_id = a.request_id AND a.status = "Allocated" 
    WHERE  rm.id = rp.room_id)
于 2013-02-16T11:29:17.043 に答える