You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL查询指定用户未出价的所有拍卖记录SQL写法

PostgreSQL查询指定用户未提交出价的拍卖记录方案

基础表结构说明

  • Auction(拍卖表)
    • 主键:auction_id
    • 字段:auction_id(PK)、auction_data
    • 示例数据:共3条拍卖记录,auction_id对应为A1、A2、A3
  • Bids(出价表)
    • 主键:bid_id
    • 外键:auction_id关联Auction表的auction_id字段
    • 字段:bid_id(PK)、auction_id(FK)、user_id、bid_price
    • 业务规则:单个用户对单场拍卖仅可提交1次出价
    • 验证场景:查询用户U1未出价的拍卖时,预期返回结果为auction_id=A3

最优实现写法

最简洁直观、性能也最好的写法是使用NOT EXISTS谓词,语义和需求完全匹配:判断拍卖表中不存在「当前拍卖+指定用户」对应的出价记录即可,写法如下:

SELECT a.auction_id, a.auction_data
FROM Auction a
WHERE NOT EXISTS (
    SELECT 1
    FROM Bids b
    WHERE
        b.auction_id = a.auction_id
        AND b.user_id = 'U1' -- 替换为实际需要查询的目标用户ID
);

其他可选写法

如果习惯关联查询写法,也可以用左外连接+空值判断的反连接逻辑实现,返回结果和上述写法一致:

SELECT a.auction_id, a.auction_data
FROM Auction a
LEFT JOIN Bids b
  ON a.auction_id = b.auction_id
  AND b.user_id = 'U1' -- 注意用户ID过滤条件要写在JOIN子句中,不能写在WHERE里
WHERE b.bid_id IS NULL;

注意:不推荐使用NOT IN写法实现该需求,一旦Bids表中关联字段出现空值,会导致整个查询结果异常,且查询性能弱于上述两种方案。

内容的提问来源于stack exchange,提问作者Vegan Vegeta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:54:23