在单个查询中多次使用相同的子查询

Tal*_*han 5 mysql sql subquery

我正在运行一个查询,其中包含在子句中多次使用的相同子查询WHERE.

我有拖字段的表client_id,buyer_id.

子查询返回要从结果中排除的日期列表.

这就是我使用它的方式.

SELECT
  id, client_id, buyer_id
FROM relation
WHERE
  client_id NOT IN (SELECT <some_id> FROM <some_table> WHERE ...)
  AND buyer_id NOT IN (SELECT <some_ids> FROM <some_table> WHERE ...)
Run Code Online (Sandbox Code Playgroud)

这是按预期的方式工作但令我困扰的是,有两个相同的子查询.我想知道是否有一种方法可以使用它一次并将结果用于两个地方.

谢谢.

ype*_*eᵀᴹ 3

您可以使用以下方式编写NOT EXISTS

SELECT
    id, client_id, buyer_id
FROM relation AS r
WHERE NOT EXISTS
      ( SELECT 1 
        FROM <some_table> 
        WHERE (r.client_id = <some_id> OR r.buyer_id = <some_id>) 
          AND ...
      ) ;
Run Code Online (Sandbox Code Playgroud)