1

我有两个表,customers(带有列 A, B)和orders(带有列C, D, A;最后一个是外键)。

此查询返回我感兴趣的数据:

SELECT customers.A, customers.B, orders.C, orders.D 
FROM customers, orders
WHERE customers.A = orders.A AND customers.B < 5 AND orders.D < 5

如果我添加LIMIT 10,我将获得前十个 10 个结果(基本上是 10 个订单),但我想做的是根据唯一客户的数量限制输出。因此,结果中将恰好有 10 个唯一客户,因此至少有 10 个(但可能更多)订单。我认为可以使用子查询来做到这一点,但我无法弄清楚。

4

2 回答 2

2

像这样的东西:

SELECT c.A, c.B, orders.C, orders.D 
FROM (SELECT * FROM customers WHERE customers.B < 5 
      ORDER BY ....some-criteria... 
      LIMIT 10) c,
     orders
WHERE c.A = orders.A AND orders.D < 5

(验证 sqliteLIMIT在子查询中成功解析。希望它不会LIMIT默默地忽略这一点)。

于 2013-01-10T18:29:23.537 回答
2
SELECT customers.A, customers.B, orders.C, orders.D 
FROM customers, orders
WHERE customers.A IN (
    SELECT DISTINCT customers.A 
    FROM customers, orders
    WHERE customers.A = orders.A AND 
          customers.B < 5 AND 
          orders.D < 5
    LIMIT 10
) AND customers.A = orders.A AND orders.D < 5 

子查询选择 10 个不同的客户,他们的 B < 5 和至少一个 D < 5 的订单。主查询选择在子查询中选择的所有客户(我假设 A 是 ID)及其 D < 5 的订单(我们不需要再次检查 B)

于 2013-01-10T19:04:07.773 回答