MYSQL CONCAT () не работает, но я не знаю почему - PullRequest
0 голосов
/ 04 августа 2010

Нужна помощь, чтобы понять, почему мой concat () не работает и как это исправить. Я никогда не использовал concat (), но сталкивался с ситуацией, когда мне нужно было получить unit_nbr из другой таблицы и связать с ним другое поле, чтобы сделать одно поле в главном выборе.

Вот КОНКАТ (), который я использовал: 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';

Кто-нибудь может мне помочь? Спасибо.

Ответы [ 2 ]

3 голосов
/ 04 августа 2010

Нельзя использовать псевдоним поля в 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...

2 голосов
/ 04 августа 2010

Вы не используете подобные псевдонимы.
Попробуйте:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...