我有
class Question(db.Model):
wording = db.StringProperty(required=True)
class Answer(db.Model):
question = db.ReferenceProperty(Question, required=True)
userId = db.IntegerProperty(required=True)
我也想
SELECT * FROM Question WHERE Id NOT IN (
SELECT QuestionId FROM Answer WHERE userId = 1)
如何在 GQL 中执行此操作
最佳答案
GQL 没有 NOT IN
语句,因此遗憾的是,它无法完全按照您的要求进行操作。
如果 userId 的总集很小,您可以反转查询以使用 IN
语句。例如:
SELECT * FROM Answer WHERE userId IN ('2', '3')
请注意,这是对 IN
语句中的每个值执行一个子查询,并且每个 GQL 语句最多允许 30 个查询。
如果 userId = 1
的答案总数较小,您可以选择所有答案并在自己的代码中过滤掉 userId = 1
中的答案。但是,如果来自 userId 1 的答案集很大,则效率不会特别高。
最后,您可以使用 cron 来预先计算结果(并将它们存储到数据存储和/或内存缓存中),而不是按需计算这些查询。当您的代码需要这些查询之一的结果时,您可以加载缓存的结果。
关于google-app-engine - 如何在 GQL 中选择没有引用另一个模型类的所有行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10476085/