2015-01-11 3 views
0

Предположим, что у меня есть структура таблицы, как показано ниже:MySQL вставки данных с фиксированными значениями и множественного выбора результатов

notification_table

| id | receiver_id | type | content | time | 

Идентификатор приемника от пользователя таблице:

user_table

| id | username | 

И содержание и время от широковещательного таблицы:

broadcast_table

| id | content | time | 

Поэтому, когда мне нужно вставить в эту таблицу уведомлений, нужно выбрать идентификатор пользователей и выберите содержание + время из трансляций, а тип привязан к «system_broadcast». Могу ли я сделать это в одном запросе?

Я попытался

INSERT INTO notification_table (receiver_id, type, content, time) 
VALUES (
     (SELECT id FROM user_table WHERE username='test' LIMIT 1), 
     'system_broadcast', 
     (SELECT content, time FROM broadcast_table) 
) 

Но он возвращает ошибку, как "MySQL Операнд должен содержать 1 столбец (ы)".

ответ

2

Да, вы можете сделать это, используя insert . . . select. Это, кажется, соответствует намерение Вашего оригинального запроса:

INSERT INTO notification_table (receiver_id, type, content, time) 
    SELECT (SELECT id FROM user_table WHERE username = 'test' LIMIT 1), 
      'system_broadcast', 
      content, time 
    FROM broadcast_table; 

Обратите внимание, что это будет вставить одну строку для каждой строки в . Возможно, вам понадобится предложение where или limit, чтобы получить только определенные строки.

+0

Да, это работает. И у меня есть условие ограничения, которое я могу справиться сам. Благодарю. – mrmoment

Смежные вопросы