【问题标题】:How to combine two SQLite SELECT statement with two conditions如何将两个 SQLite SELECT 语句与两个条件结合起来
【发布时间】:2012-12-12 18:01:55
【问题描述】:

在这里,我想从同一张桌子中选择两个不同难度的问题。我正在使用查询:

readAllQuestions = [NSString stringWithFormat: @"SELECT * FROM tbl_questions WHERE difficulty IN(1,3) AND approved = 1"];

它的工作。现在我想将问题限制为 100 个,其中包括 50 个难度为 1 的问题和其他 50 个难度为 3 的问题。使用 LIMIT 只给出前 100 个问题。

如何在不使用两个不同查询的情况下做到这一点?请帮忙..

【问题讨论】:

  • 查找UNION - LIMIT 是一个视图操作,因此它需要包含在每个独立子查询中。
  • @pst 我试过这个,但没有奏效:SELECT * FROM tbl_dn_questions WHERE 难度 = 1 并批准 = 1 LIMIT 50 UNION ALL SELECT * FROM tbl_dn_questions WHERE 难度 = 3 并批准 = 1 LIMIT 50

标签: objective-c ios sqlite select limit


【解决方案1】:

您可以使用子选择来做到这一点: (假设主键叫做'id')

SELECT * FROM tbl_questions WHERE (id IN (SELECT id FROM tbl_questions WHERE difficulty = 1 LIMIT 0,50) OR id IN (SELECT id FROM tbl_questions WHERE difficulty = 3 LIMIT 0,50)) AND approved = 1

【讨论】:

  • 谢谢 Cromax。此查询检索到 50 个难度为 1 和 50 个难度为 3 但不是按照 id 的顺序(不是每种情况下的前 50 个)。如何按顺序获得它??
  • 你想要每个困难的块按 id 排序还是你想要所有 100 个按 id 排序?首先:SELECT * FROM tbl_questions WHERE(id IN(SELECT id FROM tbl_questions WHERE难度=1 ORDER BY id LIMIT 0,50)或id IN(SELECT id FROM tbl_questions WHERE难度=3 ORDER BY id LIMIT 0,50))并获得批准= 1 秒:SELECT * FROM tbl_questions WHERE(id IN(SELECT id FROM tbl_questions WHERE 难度 = 1 LIMIT 0,50)或 id IN(SELECT id FROM tbl_questions WHERE 难度 = 3 LIMIT 0,50))并批准 = 1 ORDER BY身份证
  • 您的答案非常适用于我在数据库中的四个表中的两个。但对于其他两个,它给我的问题没有任何 id 顺序。可能问题不在您的查询中。我会查一下。谢谢你的回复...:)
猜你喜欢
  • 1970-01-01
  • 2015-08-30
  • 1970-01-01
  • 2011-08-22
  • 1970-01-01
  • 2021-09-13
  • 2014-04-05
  • 2021-11-21
  • 2014-06-18
相关资源
最近更新 更多