ошибка: подзапрос возвращает более 1 строки при попытке вставить переменные в несколько строк из 2 таблиц MYSQL - PullRequest
0 голосов
/ 28 декабря 2018

Следующий код сопоставляет результаты из 2 таблиц и возвращает несколько результатов из.Итак, эта часть кода работает: `

SET @t1 := 
(SELECT
  user_id
FROM
    test.wp_usermeta wp_usermeta,
    test.subs subs
WHERE
    wp_usermeta.meta_value = subs.email
);
SET @t2 := 
(SELECT 
  cusid
FROM
    test.wp_usermeta wp_usermeta,
    test.subs subs
WHERE
    wp_usermeta.meta_value = subs.email
);`

Однако, когда я пытаюсь выполнить функцию ввода со всем этим, она добавляет только одну строку, когда я на самом деле хочу добавить новую строку для всех результатовприведенный выше код дает мне.Вот код с функцией вставки:

SET @t1 := 
(SELECT
  user_id
FROM
    test.wp_usermeta wp_usermeta,
    test.subs subs
WHERE
    wp_usermeta.meta_value = subs.email
);
SET @t2 := 
(SELECT 
  cusid
FROM
    test.wp_usermeta wp_usermeta,
    test.subs subs
WHERE
    wp_usermeta.meta_value = subs.email
);
INSERT test.wp_usermeta(umeta_id, user_id, meta_key, meta_value)
    VALUES (NULL, @t1, "_stripe_customer_id", @t2)

Я получаю следующие сообщения об ошибках:

Query: SET @t1 error : Subquery returns more than 1 row
Query: SET @t2 error : Subquery returns more than 1 row

, и это единственное сообщение об успехе:

INSERT test.wp_usermeta(umeta_id, user_id, meta_key, meta_value)
    VALUES (NULL, @t1, "_stripe_customer_id", @t2) : affected rows : 1

Любой совет был бы очень признателен, спасибо заранее.

1 Ответ

0 голосов
/ 28 декабря 2018

Нельзя назначить несколько строк скалярной переменной.Но, может быть, вы хотите использовать INSERT ... SELECT, как показано ниже?При этом все результаты запроса будут вставлены вместе с этими литералами.

INSERT INTO test.wp_usermeta
            (umeta_id,
             user_id,
             meta_key,
             meta_value)
            SELECT NULL,
                   user_id,
                   '_stripe_customer_id',
                   cusid
                   FROM test.wp_usermeta wp_usermeta
                        INNER JOIN test.subs subs
                                   ON wp_usermeta.meta_value = subs.email;

Следует также рассмотреть возможность использования явного синтаксиса соединения и не заключать строковые литералы в двойные кавычки.Вот для чего одинарные кавычки в SQL.

...