#mysql #sql #database-design #inner-join #create-table
#mysql #sql #проектирование базы данных #внутреннее соединение #create-table
Вопрос:
Я довольно новичок в SQL, и я знаю об FOREIGN KEY
этом, но я не могу придумать способ связать две таблицы друг с другом с помощью сопоставления одного ключа.
Итак, например, есть пользователь с «именем», заданным как «John», и сообщение, для которого «автор» задан как «John».
Какой запрос я должен написать, чтобы SQL просматривал таблицу «пользователи», находил совпадение с автором сообщения и устанавливал a FOREIGN KEY
в идентификатор этого пользователя?
Ответ №1:
Предполагая, что у вас уже есть users
и posts
таблица, где posts
есть user_id
foreign key
ссылка users.id
, вы можете сделать что-то вроде этого:
update posts
join users
on posts.author = users.name
set posts.user_id = users.id;
Проблема, с которой вы можете столкнуться, заключается в том, что некоторые имена могут быть дубликатами.
Ответ №2:
Это отношение «один ко многим».
Вы бы построили таблицы следующим образом:
create table users (
user_id int primary key auto_increment,
name varchar(50)
);
create table posts (
post_id int primary key auto_increment,
user_id int not null,
content varchar(200),
constraint fk_user_id foreign key (user_id) references users(user_id)
);
Затем вы можете использовать внешний ключ для объединения таблиц:
select p.*, u.name as user_name
from posts p
inner join users u on u.user_id = p.user_id
Комментарии:
1. Я полагаю, что спрашивающий задавался вопросом о том, как обновить posts.user_id, чтобы он имел правильный users.id значение, связанное логическим отношением имя-автор, см. Мой ответ.
2. Спасибо за ваш ответ! Да, у меня есть два файла JSON, заполненных множеством пользователей и сообщений. Я собирался разобрать их на две отдельные таблицы и подумал, что лучшим способом связать их друг с другом было бы добавление ВНЕШНЕГО КЛЮЧА после заполнения обеих таблиц и выполнения определенного запроса объединения с установленными фильтрами. Единственный совпадающий ключ, который есть у них обоих, — это имя.