Вопрос:
Нужна помощь, чтобы понять, почему мой concat() не работает и как его исправить. Я никогда не использовал concat(), но приходил к ситуации, когда мне нужно было получить unit_nbr из другой таблицы и связать другое поле, чтобы сделать одно поле в основном select.
Здесь CONCAT() я использовал: CONCAT(b.name, ‘ — ‘, unit_nbr) as lease_name
Результат, который я ищу, – это что-то вроде “lease_name”: John Doe – Unit 123
Здесь мой SQL:
SELECT a.lease_id, a.occupant_id, a.unit_id, (SELECT xx.unit_nbr FROM p_unit xx WHERE xx.unit_id = a.unit_id) as unit_nbr, c.name as prop_name, d.p_name, CONCAT(b.name, ‘ — ‘, unit_nbr) as lease_name FROM o_leases a, p_occupants b, properties c, portfolio d WHERE a.occupant_id = b.occupant_id AND b.property_id = c.properties_id AND c.portfolio_id = d.portfolio_id AND a.archived = 1’;
Может ли кто-нибудь мне помочь? Спасибо.
Лучший ответ:
Вы не используете псевдонимы вроде этого.
Попробуйте:
SELECT a.lease_id, a.occupant_id, a.unit_id, xx.unit_nbr, c.name as prop_name, d.p_name, CONCAT(b.name, ‘ — ‘, xx.unit_nbr) as lease_name FROM o_leases a, p_occupants b, properties c, portfolio d, p_unit xx WHERE a.occupant_id = b.occupant_id AND b.property_id = c.properties_id AND c.portfolio_id = d.portfolio_id AND a.archived = 1 AND xx.unit_id = a.unit_id; Ответ №1
Вы не можете использовать псевдоним поля в SELECT: CONCAT(b.name, ‘ — ‘, unit_nbr) ( unit_nbr – псевдоним)
Попробуйте
SELECT aaa.*, CONCAT(aaa.name, ‘ — ‘, aaa.unit_nbr) as lease_name FROM ( SELECT a.lease_id, a.occupant_id, a.unit_id, a.name, (SELECT xx.unit_nbr FROM p_unit xx WHERE xx.unit_id = a.unit_id) as unit_nbr, c.name as prop_name, d.p_name FROM o_leases a, p_occupants b, properties c, portfolio d WHERE a.occupant_id = b.occupant_id AND b.property_id = c.properties_id AND c.portfolio_id = d.portfolio_id AND a.archived = ‘1’)aaa;
Другим решением является замена unit_nbr в CONCAT подзапросом (
… CONCAT(aaa.name, ‘ — ‘, (SELECT xx.unit_nbr FROM p_unit xx WHERE xx.unit_id = a.unit_id)) as lease_name…