MySQL:对自定义生成的列(别名)进行 IS NOT NULL 检查
MySQL : IS NOT NULL check on custom generated column(alias)
存储过程到目前为止工作正常,但我想要记录 仅当 dist_calculated
IS NOT NULL
。当我在 where clause
中使用该条件时,它显示错误 #1054 - Unknown column 'dist_calculated' in 'where clause'
。没有 where 子句它运行良好并且 returns NULL 记录太像 :
entity_id dist_calculated
49 NULL
50 NULL
52 4460.615
51 4875.179
我想排除 NULL。
我试过WHERE dist_calculated IS NOT NULL
,WHERE cpe.dist_calculated IS NOT NULL
还是报错。
我的存储过程是:
DELIMITER //
CREATE PROCEDURE get_close_childcares(IN latUser DECIMAL(15,6),IN lngUser DECIMAL(15,6) )
BEGIN
/*Get 4 ids of closest childcares*/
/*Outer query
@param : userLat, userLng, Current childcare lat,current childcare lng
Note : Inner query returns lat , lng of Current product 176 : lat , 177: lng
*/
SELECT cpe.entity_id , get_distance_in_miles_between_geo_locations(latUser,lngUser,
(SELECT cpev.value FROM catalog_product_entity_varchar AS cpev
WHERE (cpev.entity_id = cpe.entity_id AND cpev.attribute_id = 176)
),
(SELECT cpev.value FROM catalog_product_entity_varchar AS cpev
WHERE (cpev.entity_id = cpe.entity_id AND cpev.attribute_id = 177)
)
) AS dist_calculated
FROM catalog_product_entity AS cpe
WHERE dist_calculated IS NOT NULL
ORDER BY dist_calculated ASC
LIMIT 0,4;
END
//
DELIMITER ;
并调用存储过程:
call get_close_childcares(19.992100,73.777000)
谢谢。
MySQL 允许在 GROUP BY 和 HAVING 上使用列别名,但不允许在 WHERE 语句中使用。因此,您需要在 WHERE 中使用完整定义,例如
SELECT cpe.entity_id , get_distance_in_miles_between_geo_locations(latUser,lngUser,
(SELECT cpev.value FROM catalog_product_entity_varchar AS cpev
WHERE (cpev.entity_id = cpe.entity_id AND cpev.attribute_id = 176)
),
(SELECT cpev.value FROM catalog_product_entity_varchar AS cpev
WHERE (cpev.entity_id = cpe.entity_id AND cpev.attribute_id = 177)
)
) AS dist_calculated
FROM catalog_product_entity AS cpe
WHERE
get_distance_in_miles_between_geo_locations(latUser,lngUser,
(SELECT cpev.value FROM catalog_product_entity_varchar AS cpev
WHERE (cpev.entity_id = cpe.entity_id AND cpev.attribute_id = 176)
),
(SELECT cpev.value FROM catalog_product_entity_varchar AS cpev
WHERE (cpev.entity_id = cpe.entity_id AND cpev.attribute_id = 177)
)
) IS NOT NULL
ORDER BY dist_calculated ASC
LIMIT 0,4;
请尝试
CREATE PROCEDURE get_close_childcares(IN latUser DECIMAL(15,6),IN lngUser DECIMAL(15,6) )
BEGIN
/*Get 4 ids of closest childcares*/
/*Outer query
@param : userLat, userLng, Current childcare lat,current childcare lng
Note : Inner query returns lat , lng of Current product 176 : lat , 177: lng
*/
SELECT cpe.entity_id , get_distance_in_miles_between_geo_locations(latUser,lngUser,
(SELECT cpev.value FROM catalog_product_entity_varchar AS cpev
WHERE (cpev.entity_id = cpe.entity_id AND cpev.attribute_id = 176)
),
(SELECT cpev.value FROM catalog_product_entity_varchar AS cpev
WHERE (cpev.entity_id = cpe.entity_id AND cpev.attribute_id = 177)
)
) AS dist_calculated
FROM catalog_product_entity AS cpe
WHERE get_distance_in_miles_between_geo_locations(latUser,lngUser,
(SELECT cpev.value FROM catalog_product_entity_varchar AS cpev
WHERE (cpev.entity_id = cpe.entity_id AND cpev.attribute_id = 176)
),
(SELECT cpev.value FROM catalog_product_entity_varchar AS cpev
WHERE (cpev.entity_id = cpe.entity_id AND cpev.attribute_id = 177)
)
) IS NOT NULL
ORDER BY dist_calculated ASC
LIMIT 0,4;
END
你可以试试这个伙伴:
SELECT
cpe.entity_id,
get_distance_in_miles_between_geo_locations (
latUser,
lngUser,
cpev_1.`value`,
cpev_2.`value`
) AS dist_calculated
FROM
catalog_product_entity cpe
INNER JOIN catalog_product_entity_varchar cpev_1 ON cpev_1.entity_id = cpe.entity_id
AND cpev_1.attribute_id = 176
INNER JOIN catalog_product_entity_varchar cpev_2 ON cpev_2.entity_id = cpev.entity_id
AND cpev_2.attribute_id = 177
ORDER BY
dist_calculated ASC
LIMIT 0,4;
存储过程到目前为止工作正常,但我想要记录 仅当 dist_calculated
IS NOT NULL
。当我在 where clause
中使用该条件时,它显示错误 #1054 - Unknown column 'dist_calculated' in 'where clause'
。没有 where 子句它运行良好并且 returns NULL 记录太像 :
entity_id dist_calculated
49 NULL
50 NULL
52 4460.615
51 4875.179
我想排除 NULL。
我试过WHERE dist_calculated IS NOT NULL
,WHERE cpe.dist_calculated IS NOT NULL
还是报错。
我的存储过程是:
DELIMITER //
CREATE PROCEDURE get_close_childcares(IN latUser DECIMAL(15,6),IN lngUser DECIMAL(15,6) )
BEGIN
/*Get 4 ids of closest childcares*/
/*Outer query
@param : userLat, userLng, Current childcare lat,current childcare lng
Note : Inner query returns lat , lng of Current product 176 : lat , 177: lng
*/
SELECT cpe.entity_id , get_distance_in_miles_between_geo_locations(latUser,lngUser,
(SELECT cpev.value FROM catalog_product_entity_varchar AS cpev
WHERE (cpev.entity_id = cpe.entity_id AND cpev.attribute_id = 176)
),
(SELECT cpev.value FROM catalog_product_entity_varchar AS cpev
WHERE (cpev.entity_id = cpe.entity_id AND cpev.attribute_id = 177)
)
) AS dist_calculated
FROM catalog_product_entity AS cpe
WHERE dist_calculated IS NOT NULL
ORDER BY dist_calculated ASC
LIMIT 0,4;
END
//
DELIMITER ;
并调用存储过程:
call get_close_childcares(19.992100,73.777000)
谢谢。
MySQL 允许在 GROUP BY 和 HAVING 上使用列别名,但不允许在 WHERE 语句中使用。因此,您需要在 WHERE 中使用完整定义,例如
SELECT cpe.entity_id , get_distance_in_miles_between_geo_locations(latUser,lngUser,
(SELECT cpev.value FROM catalog_product_entity_varchar AS cpev
WHERE (cpev.entity_id = cpe.entity_id AND cpev.attribute_id = 176)
),
(SELECT cpev.value FROM catalog_product_entity_varchar AS cpev
WHERE (cpev.entity_id = cpe.entity_id AND cpev.attribute_id = 177)
)
) AS dist_calculated
FROM catalog_product_entity AS cpe
WHERE
get_distance_in_miles_between_geo_locations(latUser,lngUser,
(SELECT cpev.value FROM catalog_product_entity_varchar AS cpev
WHERE (cpev.entity_id = cpe.entity_id AND cpev.attribute_id = 176)
),
(SELECT cpev.value FROM catalog_product_entity_varchar AS cpev
WHERE (cpev.entity_id = cpe.entity_id AND cpev.attribute_id = 177)
)
) IS NOT NULL
ORDER BY dist_calculated ASC
LIMIT 0,4;
请尝试
CREATE PROCEDURE get_close_childcares(IN latUser DECIMAL(15,6),IN lngUser DECIMAL(15,6) )
BEGIN
/*Get 4 ids of closest childcares*/
/*Outer query
@param : userLat, userLng, Current childcare lat,current childcare lng
Note : Inner query returns lat , lng of Current product 176 : lat , 177: lng
*/
SELECT cpe.entity_id , get_distance_in_miles_between_geo_locations(latUser,lngUser,
(SELECT cpev.value FROM catalog_product_entity_varchar AS cpev
WHERE (cpev.entity_id = cpe.entity_id AND cpev.attribute_id = 176)
),
(SELECT cpev.value FROM catalog_product_entity_varchar AS cpev
WHERE (cpev.entity_id = cpe.entity_id AND cpev.attribute_id = 177)
)
) AS dist_calculated
FROM catalog_product_entity AS cpe
WHERE get_distance_in_miles_between_geo_locations(latUser,lngUser,
(SELECT cpev.value FROM catalog_product_entity_varchar AS cpev
WHERE (cpev.entity_id = cpe.entity_id AND cpev.attribute_id = 176)
),
(SELECT cpev.value FROM catalog_product_entity_varchar AS cpev
WHERE (cpev.entity_id = cpe.entity_id AND cpev.attribute_id = 177)
)
) IS NOT NULL
ORDER BY dist_calculated ASC
LIMIT 0,4;
END
你可以试试这个伙伴:
SELECT
cpe.entity_id,
get_distance_in_miles_between_geo_locations (
latUser,
lngUser,
cpev_1.`value`,
cpev_2.`value`
) AS dist_calculated
FROM
catalog_product_entity cpe
INNER JOIN catalog_product_entity_varchar cpev_1 ON cpev_1.entity_id = cpe.entity_id
AND cpev_1.attribute_id = 176
INNER JOIN catalog_product_entity_varchar cpev_2 ON cpev_2.entity_id = cpev.entity_id
AND cpev_2.attribute_id = 177
ORDER BY
dist_calculated ASC
LIMIT 0,4;