Хранимая процедура MySQL для обхода двух таблиц, выбора значений и сохранения в третьей - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть 3 таблицы users, memos и memos_read.

users:

+---+----------+
|ID | NAME     |
+---+----------+
| 1 | Mike     |
| 4 | Susan    |
| 5 | Peter    |
| 6 | Mary     |
+---+----------+

memos:

+---+----------+
|ID | CONTENT  |
+---+----------+
| 15| Hello    |
| 16| World    |
| 17| Foo      |
| 23| Bar      |
+---+----------+

Я хочу создать хранимую процедуру с вложенным циклом, чтобы создать «карту чтения» для прочитанных заметок, создавая что-то вроде:

memos_read:

+---------+----------+
| MEMO_ID | USER_ID  |
+---------+----------+
|    15   |    1     |
|    15   |    4     |
|    15   |    5     |
|    15   |    6     |
|    16   |    1     |
|    16   |    4     |
|    16   |    5     |
|    16   |    6     |
|    17   |    1     |
|    17   |    4     |
|    17   |    5     |
|    17   |    6     |
|    23   |    1     |
|    23   |    4     |
|    23   |    5     |
|    23   |    6     |
+---------+----------+

Это возможно?Спасибо заранее!

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

@ Ник ответ должно работать на вас;однако, если вы не заинтересованы в создании новой таблицы, скорее используйте динамическую «карту чтения» внутри запроса;Вы можете использовать Производная таблица .

Общая структура запроса будет выглядеть следующим образом:

SELECT
  read_map.MEMO_ID,
  read_map.USER_ID,
  ...
FROM 
(
  SELECT 
    m.ID AS MEMO_ID, 
    u.ID AS USER_ID
  FROM users AS u 
  CROSS JOIN memos AS m 
) AS read_map 

...  -- here you can join with other tables as required
WHERE ...
0 голосов
/ 23 ноября 2018

Вы можете использовать синтаксис CREATE TABLE ... SELECT для создания таблицы memos_read:

CREATE TABLE memos_read AS
SELECT m.ID AS MEMO_ID, u.ID AS USER_ID
FROM memos m 
CROSS JOIN users u

Вывод соответствует вашему запросу. Демо на dbfiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...