2011-06-08 4 views
0

Je suis aux prises avec une telle requête (générée par sqlalchemy. Je l'ai renommé pour la clarté)Pourquoi cette requête ne fonctionne pas (problème avec EXISTE)

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)) 

Pour dx, dy = 1, 1 et tables:

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

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

Il devrait retourner:

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

Cependant, la seconde condition semble revenir faux.

EDIT: Il semble y avoir un problème avec le vidage de transaction dans SQLAlchemy. Je pensais que dans le cas de l'exécution de la requête (non-ORM mappé), il va automatiquement vider. Cependant, il semble qu'il ne soit pas rincé dans un tel cas ou vidé dans un ordre incorrect. Dans tous les cas, ajouter model.DBSession.flush() semble avoir résolu le problème.

+2

Ne devrait-il pas retourner '1 | 1'? – bernie

+1

Je pense que la ligne 1 devrait être 'SELECT table.x +: dx AS cx, table.y +: dy AS cy' – bernie

+2

J'ai testé avec votre table-structure et les valeurs et la requête renvoie' 1 | 1'. Qu'est-ce que je rate? – bernie

Répondre

0

Comme écrit en éditer le problème était en rinçage.

Questions connexes