SQL 限制 SELECT 但不能加入
SQL limit SELECT but not JOIN
我正在我的 BD 上实现分页。我的问题是当我想限制 SELECT 语句而不是 JOIN 时。例如,一个产品可以有多个价格:
SELECT * FROM product
LEFT JOIN price ON product.id == price.id_product
LIMIT 20
但我想获得 20 种产品,每一种都有它们的价格。我如何限制语句 SELECT,而不是 LEFT JOIN.
示例:
product price.id price.id_pruct price.price
1 1 1 50
2 2 1 30
3 3 1 40
4 1 20
5 2 30
SELECT * FROM product
LEFT JOIN price ON product.id == price.id_product
LIMIT 3
Return:
product price.id id_prodcut price
1 1 1 50
1 2 1 30
1 3 1 40
但我想要
product price.id id_prodcut price
1 1 1 50
1 2 1 30
1 3 1 40
1 4 1 20
2 5 2 30
3 . . .
三种产品(限3)
谢谢。我希望你能帮助我。
修改您的查询以限制产品行数,然后再将其加入价格 table。这意味着我们要将查询的结果连接到 table,或者换句话说,我们编写一个包含子查询的查询:
SELECT *
FROM (
SELECT *
FROM product
ORDER BY id_product
LIMIT 3
) p
LEFT JOIN price ON p.id = price.id_product
希望对您有所帮助。
我会编写一个子查询来获取前三个产品(或您选择的任何条件),如下所示:
SELECT id
FROM product
ORDER BY id
LIMIT 3;
一旦我有了它,我就可以 select 价格 table 的所有东西,只要该 id 在那个子查询中。您可以使用联接来执行此操作:
SELECT p.*
FROM price p
JOIN(
SELECT id
FROM product
ORDER BY id
LIMIT 3) tmp ON tmp.id = p.product_id;
这是一个使用您的示例数据的 SQL Fiddle 示例,我还添加了一个不会返回的行,因此您可以看到它有效。
我正在我的 BD 上实现分页。我的问题是当我想限制 SELECT 语句而不是 JOIN 时。例如,一个产品可以有多个价格:
SELECT * FROM product
LEFT JOIN price ON product.id == price.id_product
LIMIT 20
但我想获得 20 种产品,每一种都有它们的价格。我如何限制语句 SELECT,而不是 LEFT JOIN.
示例:
product price.id price.id_pruct price.price
1 1 1 50
2 2 1 30
3 3 1 40
4 1 20
5 2 30
SELECT * FROM product
LEFT JOIN price ON product.id == price.id_product
LIMIT 3
Return:
product price.id id_prodcut price
1 1 1 50
1 2 1 30
1 3 1 40
但我想要
product price.id id_prodcut price
1 1 1 50
1 2 1 30
1 3 1 40
1 4 1 20
2 5 2 30
3 . . .
三种产品(限3)
谢谢。我希望你能帮助我。
修改您的查询以限制产品行数,然后再将其加入价格 table。这意味着我们要将查询的结果连接到 table,或者换句话说,我们编写一个包含子查询的查询:
SELECT *
FROM (
SELECT *
FROM product
ORDER BY id_product
LIMIT 3
) p
LEFT JOIN price ON p.id = price.id_product
希望对您有所帮助。
我会编写一个子查询来获取前三个产品(或您选择的任何条件),如下所示:
SELECT id
FROM product
ORDER BY id
LIMIT 3;
一旦我有了它,我就可以 select 价格 table 的所有东西,只要该 id 在那个子查询中。您可以使用联接来执行此操作:
SELECT p.*
FROM price p
JOIN(
SELECT id
FROM product
ORDER BY id
LIMIT 3) tmp ON tmp.id = p.product_id;
这是一个使用您的示例数据的 SQL Fiddle 示例,我还添加了一个不会返回的行,因此您可以看到它有效。