В настоящее время есть функция, которая использует следующий оператор SQL:
SELECT 'plans'.'concurrents'
FROM 'plans'
LEFT JOIN 'users' ON 'users'.'membership' = 'plans'.'ID'
WHERE 'users'.'ID' = ?'
Я пытаюсь добавить в инструкцию SQL, чтобы она также добавляла значение в столбце "extra_concurrents" в таблице "users" к значению, которое возвращается из приведенного выше оператора SQL.
Я пробовал, но не повезло:
SELECT 'plans'.'concurrents'
FROM 'plans'
LEFT JOIN 'users' ON 'users'.'membership' AND 'users'.'extra_concurrents' = 'plans'.'ID'
WHERE 'users'.'ID' = ?'
Мне нужно вернуть общую стоимость планов. Токи и пользователи добавлены вместе.
Мне нужно что-то сказать о вашем запросе. left join
совершенно ненужно. Ваше предложение where
превращает его в внутреннее соединение.
Затем я рекомендую псевдонимы таблиц, чтобы упростить запрос. Остальное - дополнение:
SELECT p.concurrents + coalesce(u.extra_concurrents, 0)
FROM plans p JOIN
users u
ON u.membership = p.ID
WHERE u.ID = ?;
Также обратите внимание на coalesce()
, на всякий случай, users.extra_concurrents
столбец users.extra_concurrents
равен NULL
.
Когда вы присоединяетесь к таблицам, вы можете вызывать столбцы из другой таблицы
SELECT 'plans'.'concurrents','users'.'extra_concurrents'
FROM 'plans'
LEFT JOIN 'users' ON 'users'.'membership' = 'plans'.'ID'
WHERE 'users'.'ID' = ?'
Вам нужно будет использовать несколько соединений вместо "и". Не видя вашей структуры данных, трудно точно сказать, что вам нужно, но, вероятно, что-то вроде этого:
SELECT 'plans'.'concurrents'
FROM 'plans' 'A'
LEFT JOIN 'users' 'B' ON 'B'.'membership' = 'A'.'ID'
INNER JOIN 'users' 'C' ON 'C'.'extra_concurrents' = 'A'.'ID'
WHERE 'users'.'ID' = ?'
SELECT sum(('plans'.'concurrents')+('users'.'extra_concurrents'))
FROM 'plans'
LEFT JOIN 'users' ON 'users'.'membership' = 'plans'.'ID'
WHERE 'users'.'ID' = ?'
Примечание: его не очень удобно добавлять, когда условие находится на левой таблице.
Удачи