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)
→ Ссылка