Почему этот запрос не работает (проблема с EXISTS) - PullRequest
0 голосов
/ 08 июня 2011

Я борюсь с таким запросом (сгенерированным 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 Ответ

0 голосов
/ 09 июня 2011

Как написано в edit проблема была в промывке.

...