SQL。检查2个列表是否相交

标签 sql postgresql

我想检查子查询的结果是否与数字列表相交。

我正在尝试使用这个查询

SELECT * FROM my_table mt WHERE 
   EXISTS (
     (SELECT at.id FROM another_table at where at.some_id = mt.id) 
       INTERSECT 
     (1,2,3,4)
   )

(1, 2, 3, 4) 将在运行时由应用程序替换。

但是我得到了错误:

ERROR:  syntax error at or near "1"

我该如何解决这个问题? 我正在使用 PostgreSQL

最佳答案

您可以使用 VALUES 生成一个由 INTERSECT 使用的“常量表”:

SELECT * FROM my_table mt WHERE 
   EXISTS (
     (SELECT at.id FROM another_table at where at.some_id = mt.id) 
       INTERSECT VALUES (1),(2),(3),(4)
   )

SQL Fiddle Demo

关于SQL。检查2个列表是否相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29953046/

相关文章:

mysql - 用于获取一个月中某天的每个第一个事件(按日期时间字段)的 SQL 查询

postgresql - 适用于 Windows 的 PGXN 客户端?

sql - JSON 上的 PostgreSQL 索引

postgresql - 什么是 Postgres < 9.0 的 DO block 的等价物

python - 使用 Psycopg2 获取所有模式的名称

postgresql - 在所有 1000 个 postgres 数据库和模式上创建只读用户

SQL 子查询 - 对行中返回的每个 "ID"执行一个 select 语句

mysql - 如何通过在 sql 上连接 3 个表来插入行数?

sql - 使用 SQL 语句调试 Shell 脚本时出错到 V_$UNDOSTAT

sql - 无法解决临时表和 sys.objects 之间的排序规则冲突