Переформатирование запроса на удобочитаемость:
SELECT account_id, fname, lname,
(SELECT email FROM account WHERE id = account_id) AS email
FROM user_account
WHERE account_id IN (SELECT destination_id FROM friendship WHERE source_id = $user_id)
AND (CONCAT(fname, lname) LIKE '%a%' OR email LIKE '%a%')
Наиболее вероятная причина неполадок состоит в том, что единственная таблица, на которую столбец email
может ссылаться в главном предложении WHERE, это user_account
, ноСтолбец email
находится только в таблице account
.
Самое простое решение - удалить подзапрос в списке выбора и использовать вместо него обычное объединение:
SELECT u.account_id, u.fname, u.lname, a.email
FROM user_account AS u
JOIN account AS a ON a.id = u.account_id
WHERE account_id IN (SELECT destination_id
FROM friendship AS f
WHERE f.source_id = $user_id)
AND (CONCAT(u.fname, u.lname) LIKE '%a%' OR a.email LIKE '%a%');
Я предполагаю, что $user_id
является входным значением, и запись имеет смысл в вашей системе;в SQL оно обычно недопустимо.
Не ясно, что предложение IN имеет много преимуществ;это тоже можно объединить с другими таблицами.