MYSQL CONCAT() не работает, но я не знаю, почему

Вопрос:Нужна помощь, чтобы понять, почему мой concat() не работает и как его исправить. Я никогда не использовал concat(), но приходил к ситуации, когда мне нужно было получить unit_nbr из другой таблицы и связать другое поле, чтобы сделать одно поле в основном select. Здесь CONCAT() я использовал: CONCAT(b.name, ' - ', unit_nbr) as lease_name Результат, который

Вопрос:

Нужна помощь, чтобы понять, почему мой 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…

Оцените статью
Добавить комментарий