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

如何检查SQL中src与destination库的time、id组合无重复?

跨表(time, id)重复组合的SQL查询验证

正确的查询方案

方案1:EXISTS子查询

SELECT *
FROM src
WHERE EXISTS (
    SELECT 1
    FROM destination
    WHERE destination.time = src.time
      AND destination.id = src.id
);

这个语句会精准返回src中所有在destination里存在相同(time, id)组合的行,完全匹配需求。

方案2:行值匹配(需数据库支持)

像PostgreSQL、SQLite 3.33+这类支持行值构造的数据库,可以用更简洁的写法:

SELECT *
FROM src
WHERE (time, id) IN (
    SELECT time, id
    FROM destination
);

你之前遇到的第一个报错“sub-select returns 1 columns - expected 2”,是因为子查询只返回了一列,但(time, id) IN (...)要求子查询必须返回两列,对应匹配这两个字段。

第二个报错“row value misused”,大概率是你的数据库版本不支持行值直接用于IN语法,或者子查询的列数与前面的行值不匹配。

方案3:JOIN关联查询

SELECT DISTINCT src.*
FROM src
JOIN destination
  ON src.time = destination.time
  AND src.id = destination.id;

通过JOIN关联两张表,匹配相同的(time, id)组合,用DISTINCT避免src内重复行导致的结果重复,同样能得到目标结果。

关于你最后一个查询的验证

如果你的最后一个查询是上面三种写法之一,那它的语法和功能都是正确的。如果是其他写法,把具体SQL贴出来就能进一步确认,但上面三种都是经过验证的可靠写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:36:04