1

我正在尝试查找 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
4

2 回答 2

1

如果该行不存在,则需要将 INNER JOIN 更改为 LEFT OUTER JOIN。因为 INNER JOIN 的定义是它只带回连接条件评估为 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)
于 2013-02-15T23:20:16.240 回答
0

嗨使用 <> 等同于不等于... where <> 1 理解或你需要一个例子

于 2013-02-15T23:23:13.597 回答