重写SQL查询以显示找不到match = 1的行

时间:2013-02-15 23:16:53

标签: mysql

我正在尝试查找ts_request.day_id和ts_request.period_id不等于1且不存在的行。

我该怎么做呢?

我当前的SQL查询看起来正在搜索找到匹配项的行 - 我正在查找匹配不是圆形的行(因为该行不存在)。

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

2 个答案:

答案 0 :(得分:1)

如果该行不存在,则需要将INNER JOIN更改为LEFT OUTER JOIN。因为INNER JOIN的定义是它只返回join-condition计算为true的那些记录。

然后,只获取没有匹配行的记录,在WHERE子句中添加一个或多个条件。

SELECT 
  COUNT(*) totalCount 
FROM 
  ts_room 

  JOIN ts_roompref
  ON ts_room.id = ts_roompref.room_id 

  LEFT JOIN ts_request 
  ON ts_roompref.request_id = ts_request.roompref_id
WHERE 
  ts_request.day_id IS NULL;

编写上述查询的另一种方法是:

SELECT 
  COUNT(*) totalCount 
FROM 
  ts_room 

  JOIN ts_roompref
  ON ts_room.id = ts_roompref.room_id 

WHERE 
  NOT EXISTS (
    SELECT 1
    FROM ts_request 
    WHERE ts_roompref.request_id = ts_request.roompref_id)

答案 1 :(得分:0)

嗨使用<>是不等于......其中<> 1 理解或了解一个例子