为啥这个查询不起作用(EXISTS 的问题)

Posted

技术标签:

【中文标题】为啥这个查询不起作用(EXISTS 的问题)【英文标题】:Why this query doesn't work (problem with EXISTS)为什么这个查询不起作用(EXISTS 的问题) 【发布时间】:2011-06-08 16:56:34 【问题描述】:

我正在努力处理这样的查询(由 sqlalchemy 生成。为了清楚起见,我已将其重命名)

SELECT table.x + :dx AS cx, table.y + :dy AS cy 
FROM table
WHERE NOT (EXISTS (SELECT * FROM table AS table_1
                   WHERE table_1.x = cx AND table_1.y = cy))
  AND     (EXISTS (SELECT * FROM table2
                   WHERE table2.table_id = table.id))

对于 dx、dy = 1、1 和表格:

 Table:
  id | x | y
 ----+---+---
   1 | 0 | 0

 Table2:
  id | table_id
 ----+----------
  1  | 1

它应该返回:

  cx | cy
 ----+----
   1 |  1

但是第二个条件似乎返回 false。

编辑:这似乎是 SQLAlchemy 中事务刷新的问题。我认为如果执行查询(非 ORM 映射),它会自动刷新。但是,在这种情况下,它似乎没有被刷新或以不正确的顺序刷新。无论如何,添加额外的model.DBSession.flush() 似乎可以解决问题。

【问题讨论】:

不应该返回1 | 1吗? 我认为第 1 行应该是SELECT table.x + :dx AS cx, table.y + :dy AS cy 我用你的表结构和值进行了测试,查询返回1 | 1。我错过了什么? @Adam Bernier:您似乎错过了部分 SQLAlchemy 的查询缓存。请参阅编辑 是的,我确实错过了。很高兴你知道了! 【参考方案1】:

edit 中所述,问题出在冲洗中。

【讨论】:

以上是关于为啥这个查询不起作用(EXISTS 的问题)的主要内容,如果未能解决你的问题,请参考以下文章

为啥 file_exists() 不起作用?

多维动态数组,为啥不起作用?

为啥这个带参数的 sqlsrv 查询不起作用?

为啥这个简单的“INSERT INTO”查询不起作用

为啥这个 T-SQL 查询在 Synapse 中不起作用?

为啥这个使用 INNER JOIN 的 SQL DELETE 查询不起作用? [复制]