【发布时间】:2019-07-16 10:41:16
【问题描述】:
我在 SQL 中有这些 SELECT 语句: 这个:
SELECT
*
FROM
products
WHERE
product_category = '12'
LIMIT
3
还有这个:
SELECT
*
FROM
products
WHERE
product_category = '36'
LIMIT
3
还有这个:
SELECT
*
FROM
products
WHERE
product_id IN ('3178','3181','7403')
LIMIT
3
如您所见,它们非常相似,我想要有效地运行这 3 个语句,关键是整个结果应该是 9 行长(因为 3x3),首先应该显示来自类别 12 的三个产品,则应显示类别 36 中的后三个产品,最后三个产品应为 ID 为 3178,3181,7403 的产品。
我知道我可以像这样使用UNION:
(SELECT
*
FROM
products
WHERE
product_category = '12'
LIMIT
3)
UNION
(SELECT
*
FROM
products
WHERE
product_category = '36'
LIMIT
3)
UNION
(SELECT
*
FROM
products
WHERE
product_id IN ('3178','3181','7403')
LIMIT
3)
LIMIT 9
但我想知道,是否有更有效的方法,因为这些语句大多是副本。
【问题讨论】:
-
为什么限制为 3?有什么具体原因吗?
-
请注意,单独使用
UNION并不能保证您需要的 category=12,然后是 36 等顺序。“UNION 默认情况下会生成一组无序的行” .参考:dev.mysql.com/doc/refman/8.0/en/union.html -
您使用的是哪个 MySQL 版本?
-
@James 因为它必须是 3