问题描述
今天在使用CONCAT拼接查询字段的时候,用到了子查询,用了别名,但是SQL却报错了,报错信息如下
Unknown column 'itemProperty' in 'field list'
CONCAT使用的时候需要在表中有对应的字段,因为使用了别名而表中没有字段,所以报错了,如果别名在表中有对应的字段,也正常,但是此处需要查询2次同一个字段,所以需要换一个思路
SQL
SELECT
isp.property_code,
isp.website_code,
isp.category_code,
isp.property_name,
DATE_FORMAT( isp.create_time, '%Y-%m-%d %H:%i:%s' ) create_time,
ic.parent_category_code,
ic.category_name,
CONCAT( itemProperty, ' && ', ic.category_name ),
( SELECT category_name FROM item_category WHERE category_code = ic.parent_category_code ) AS itemProperty
FROM
item_sku_property isp
LEFT JOIN item_category ic ON isp.category_code = ic.category_code
AND isp.website_code = ic.website_code
AND ic.state != - 1
WHERE
isp.property_parent_code = '0'
AND isp.website_code = '7476808499516821'
AND isp.state != - 1
ORDER BY
isp.display_queue DESC,
isp.modify_time DESC
解决思路
在使用CONCAT函数的时候,不使用别名,直接使用子查询作为字段
SQL
SELECT
isp.property_code,
isp.website_code,
isp.category_code,
isp.property_name,
DATE_FORMAT( isp.create_time, '%Y-%m-%d %H:%i:%s' ) create_time,
ic.parent_category_code,
ic.category_name,
CONCAT( ( SELECT category_name FROM item_category WHERE category_code = ic.parent_category_code ), ' && ', ic.category_name ) item_category_name
FROM
item_sku_property isp
LEFT JOIN item_category ic ON isp.category_code = ic.category_code
AND isp.website_code = ic.website_code
AND ic.state != - 1
WHERE
isp.property_parent_code = '0'
AND isp.website_code = '7476808499516821'
AND isp.state != - 1
ORDER BY
isp.display_queue DESC,
isp.modify_time DESC
注意
在MyBatis使用 && 作为分割符的时候,需要使用转义字符,参考MyBatis转义字符