【发布时间】:2012-12-11 17:38:30
【问题描述】:
如果我使用:
SELECT *
FROM "moves"
INNER
JOIN "move_conditions"
ON "move_conditions"."move_id" = "moves"."id"
INNER
JOIN "conditions"
ON "conditions"."id" = "move_conditions"."condition_id"
WHERE "conditions"."id" IN (29, 3)
这将返回条件 ID 为 29 或 3 的正确表。
但是,如果我尝试:
SELECT *
FROM "moves"
INNER
JOIN "move_conditions"
ON "move_conditions"."move_id" = "moves"."id"
INNER
JOIN "conditions"
ON "conditions"."id" = "move_conditions"."condition_id"
WHERE "conditions"."id" NOT IN (29, 3)
结果不正确。结果中包含 id 为 29 或 3 的条件。他们不应该。我该如何解决这个问题?
【问题讨论】:
-
请发布样本数据(例如在sqlfiddle.com)。
NOT IN肯定在 PostgreSQL 中正常工作 -
这似乎没问题,你能发布你的整个查询吗?
-
可能是
from tbl1, tbl2 where风格查询? -
可能提供的示例没有应有的准确,但请确保检查条件中没有
NULL值:NOT IN (NULL, 29, 3) -
尝试改写为 conditions.id 29 和 conditions.id 3.. 看看是否正常。或者也尝试强制转换 conditions.id::int.
标签: sql postgresql notin