gpt4 book ai didi

mysql - 在 WHERE 子句中使用 AS 字段

转载 作者:行者123 更新时间:2023-12-01 00:36:33 28 4
gpt4 key购买 nike

在下面的例子中:

SELECT op.product_id, op.name, IF(op.sku <> '', op.sku, op.model) AS op_sku,
SUM(op.quantity) AS quantity
FROM order_product op GROUP BY op_sku ORDER BY op_sku ASC LIMIT 0,50

如何在 WHERE 子句中使用 op_sku?我是否需要添加另一个选择来获得我需要的值?

编辑原始查询:

SELECT op.product_id, 
op.name,
IF(op.sku <> '', op.sku, op.model) AS model,
SUM(op.quantity) AS quantity,
op.sku
FROM `oc_product` p
RIGHT JOIN `oc_order_product` op
ON ( p.product_id = op.product_id )
LEFT JOIN `oc_order` o
ON ( op.order_id = o.order_id )
WHERE o.order_status_id IN( 17 )
GROUP BY op.sku
ORDER BY op.sku ASC
LIMIT 0, 50

最佳答案

您不能在同一查询的 WHERE 子句中使用 SELECT 子句中定义的别名,因为它在 WHERE 时尚不可用 子句被评估。一种选择是只重复 IF 表达式:

SELECT
op.product_id,
op.name,
IF(op.sku <> '', op.sku, op.model) AS op_sku,
SUM(op.quantity) AS quantity
FROM order_product op
WHERE IF(op.sku <> '', op.sku, op.model) = <some_value>
GROUP BY op_sku
ORDER BY op_sku
LIMIT 0,50

处理此问题的另一个通用选项是包装当前查询,然后从中选择。在这种情况下,别名将可用:

SELECT *
FROM
(
SELECT
op.product_id,
op.name,
IF(op.sku <> '', op.sku, op.model) AS op_sku,
SUM(op.quantity) AS quantity
FROM order_product op
GROUP BY op_sku
) t
WHERE t.op_sku = <some_value>
ORDER BY op_sku
LIMIT 0, 50

作为其他人的一般评论,如果您在按 op_sku 分组时选择非聚合列,您的查询可能会出现问题。理想情况下,其他列应该在功能上依赖于 op_sku ,或者 它们应该包含在聚合函数中。但是,尽管底层查询存在相同的问题,但我给出的一般答案应该同样有效。

关于mysql - 在 WHERE 子句中使用 AS 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47856505/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com