我有以下表格:
client_purchases:
id_sale | id_client | timestamp
files_purchases:
id_sale | id_file
因此,只需购买一次客户,他就可以购买许多文件,并且可以多次购买这些文件。
我选择了我想要的东西:
SELECT cp.id_sale, fp.id_file
FROM client_purchases AS cp
JOIN file_purchases AS fp
ON cp.id_sale = fp.id_sale;
工作得很好。我得到的是这样的:
id_sale | id_file
1 1
1 2
1 3
2 1
3 1
现在要确保它不会永远用于查看我的数据库,如果它增长,我想限制行数。
SELECT cp.id_sale, fp.id_file
FROM client_purchases AS cp
JOIN file_purchases AS fp
ON cp.id_sale = fp.id_sale
LIMIT 0,25;
惠克给我回了25行。但我实际上想要的是25种不同的" id_sale
"。那么是否有一种方法告诉SQL计算列的DESTINCT
值并停止该值是否达到指定的数量?我确实需要能够设置LIMIT
的开始和结束值。
答案 0 :(得分:2)
您可以使用JOIN +子查询
SELECT cp.id_sale, fp.id_file
FROM (SELECT id, id_sale FROM client_purchases ORDER BY id LIMIT 25) AS cp
JOIN (SELECT id FROM file_purchases ORDER BY id LIMIT 25) AS fp
ON cp.id_sale = fp.id_sale
然而,这可能会加快您的查询速度,或者可能会使速度变得更慢。这完全取决于您拥有的索引类型以及表中的记录数。
100条记录看起来很快,100条记录和副条文可能会很慢。
答案 1 :(得分:2)
一般没有任何功能。您可以使用子查询来限制ID的数量:
SELECT cp.id_sale, fp.id_file
FROM (SELECT cp.*
FROM client_purchases cp
LIMIT 25
) cp JOIN
file_purchases fp
ON cp.id_sale = fp.id_sale ;
通常情况下,ORDER BY
之前会有LIMIT
,因此查询会返回一致的结果。
但是,这不是常规解决方案,因为client_purchases
中选择的25个ID可能与file_purchases
中的任何内容都不匹配(它们可能在您的情况下匹配,但也许不一般)。