对条件的子查询

时间:2015-06-01 16:30:05

标签: mysql

这是我的疑问:

SELECT a.product_title, b.product_title FROM products a, products b 
WHERE b.color_id = a.color_id 
AND b.price_id = a.price_id 
AND b.size_id = a.size_id 
AND a.id = 1
AND ??? (SELECT * FROM products LIMIT ???);

如果第一个查询的结果小于10,我正在尝试执行子查询,我该怎么做?是否可以在不执行其他查询的情况下计算查询在同一查询中获取的行数?

也可以将LIMIT设置为所需的,即。第一个查询获得6行,然后我需要限制为4 - 一起组成10个。

2 个答案:

答案 0 :(得分:0)

我真的不明白你的问题,

无论如何,您可以使用变量

示例:

Set ACount = (select count(a.id) from products a where ...=...);
SELECT a.product_title, b.product_title FROM products a, products b 
WHERE b.color_id = a.color_id 
AND b.price_id = a.price_id 
AND b.size_id = a.size_id 
AND a.id = 1
AND if(@ACount<10, "Your where statement here",0);

答案 1 :(得分:0)

您可以使用“UNION”执行此操作。

如果您不关心性能并且只想保存一个查询,则可以始终UNION第二个查询并从合并结果中获取前10行:

SELECT * FROM (
SELECT a.product_title, b.product_title , 0 as Rank
FROM products a, products b 
WHERE b.color_id = a.color_id 
AND b.price_id = a.price_id 
AND b.size_id = a.size_id 
AND a.id = 1
LIMIT 10
UNION 
SELECT product_title, '', Rank
FROM products  
WHERE (your condition)
LIMIT 20
) E 
ORDER BY Rank
LIMIT 10

由于第二个查询的额外结果将具有更高的排名,如果您在第一个查询中已经有10条记录,那么将会超出限制。

由于Union会删除重复项,因此您需要添加足够的结果以确保至少获得10个结果。

以上代码是为了向您展示概念,您需要根据自己的需要进行调整。