sql sub query не работает
Пытаюсь выполнить такую :
INSERT INTO cron_cashback_monthly VALUES(
SELECT m_user.id,m_user.username,sum(pillikan.cb_payment.cb_amount)
AS cashback FROM pillikan.cb_payment cbp
LEFT JOIN m_user mu ON m_user.id=pillikan.cb_payment.user_id
WHERE cb_amount >0
GROUP by m_user.id)
Выходит ошибка :
SQL Error [1064] [42000]: (conn=59) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT m_user.id,m_user.username,sum(pillikan.cb_payment.cb_amount)
Спасибо большое, c subquery может ошибка какая?
Ответы (3 шт):
Автор решения: Nick Proskuryakov
→ Ссылка
Проблема в синтаксисе, пример:
INSERT INTO tbl_temp2 (fld_id)
SELECT tbl_temp1.fld_order_id
FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;
Документация: https://mariadb.com/kb/en/insert-select/
Автор решения: Akina
→ Ссылка
Или INSERT .. VALUES, или INSERT .. SELECT, но не одновременно.
В случае INSERT .. VALUES могут использоваться подзапросы - но возвращающее строго одну запись из строго одного поля.
Так что:
INSERT INTO cron_cashback_monthly (список полей - указать обязательно!)
SELECT mu.id, mu.username, SUM(cbp.cb_amount)
FROM pillikan.cb_payment cbp
LEFT JOIN m_user mu ON mu.id=cbp.user_id
WHERE cbp.cb_amount > 0
GROUP by mu.id, mu.username
Автор решения: Абылай Немс
→ Ссылка
Спасибо, ответ:
INSERT INTO cron_cashback_monthly (username, cashback, status)
( SELECT mu.username,sum(cbp.cb_amount)
AS cashback, 1 as status FROM cb_payment cbp
LEFT JOIN m_user mu ON mu.id=cbp.user_id
WHERE cb_amount >0
GROUP by mu.id)