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

行が存在しない場合は、INNERJOINをLEFTOUTERJOINに変更する必要があります。INNER JOINの定義は、結合条件がtrueと評価されたレコードのみを戻すことであるためです。

次に、一致する行がないレコードだけを取得するには、WHERE句に1つ以上の条件を追加します。

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

こんにちは使用<>は等しくないのと同じです...ここで<>1例を理解または理解する

于 2013-02-15T23:23:13.597 に答える