为SQL查询添加额外条件

时间:2013-02-16 11:18:29

标签: mysql

我正在尝试在我的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小提琴:http://sqlfiddle.com/#!2/4540d/2

1 个答案:

答案 0 :(得分:1)

我认为问题与使用别名有关:一旦我向查询的表中添加了别名,查询就会运行并返回一些值(link to your modified 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)