2013-12-02 2 views
0

Я использую MySQL. В моей базе данных у меня есть следующие таблицы:SQL-запрос для: строк, связанных одной совместной таблицей. INSERT в другую таблицу соединений.

  1. A student стол. Первичный ключ этой таблицы: sid.

  2. A high_school стол. Основной ключ: hid.

  3. A university таблица. Основной ключ: uid.

Тогда:

  • Существует совместный стол для student & high_school, таблица называется joint_table_A имеет два столбца: sid и hid, которые ссылаются на строки в student & high_school соответственно.

  • Существует еще один совместный стол для student & university, названный joint_table_B, он также имеет два столбца: sid и uid, которые ссылаются на строки в student & university соответственно.

Моя проблема & вопрос:

Я хочу, чтобы эти students связаны sid в joint_table_A где hid = 3 будучи вставлено в joint_table_B и поставить значение uid быть 1. Это должно быть sid в joint_table_A, где hid=3 относится к тем же студентам в таблице student как sid в joint_table_B с uid=1. Что такое SQL-запрос для этой операции?

======== обновление ==========

(В приведенном выше описании я предполагаю joint_table_B пуст. Однако, если в joint_table_B есть записи для uid=1 уже, то мне нужно UPDATE с этими записями вместо INSERT)

+0

Я полагаю, в joint_table_B, вы будете держать с.и.д. же и обновление жидкости.Это верно? или вы будете поддерживать uid одинаково (что кажется неправильным). –

ответ

0

Попробуйте это:.

INSERT INTO joint_table_B (sid, uid) 
SELECT students.sid, 1 AS uid FROM students s, joint_table_A a WHERE s.sid=a.sid AND hid=3 

в случае второй таблице уже есть строки в п использовать следующее:

INSERT INTO joint_table_B (sid, uid) 
SELECT students.sid, 1 AS uid FROM students s, joint_table_A a WHERE s.sid=a.sid AND hid=3 
ON DUPLICATE KEY UPDATE uid = 1 

или

UPDATE joint_table_B SET uid = 1 
WHERE sid IN (select students.sid FROM students s, joint_table_A a WHERE s.sid=a.sid AND hid=3) 
+0

Пожалуйста, проверьте мое обновление – Mellon

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