2013-08-22 5 views
0

У меня есть следующие три таблицы ...три таблицы с внутренним соединением

Table1 
IDA colB colC  
111  a  w  
222  b  w  
333  c  s   
444  b  g  



Table2 
IDB colB colC  
11  w  f  
12  w  r  
13  s  g  



Table3 
IDA  IDB  
111  11   
222  12   
333  13  
444  14 

Что мне нужно скопировать из table1 в table2 и я мог бы использовать следующий простой запрос MySQL, чтобы сделать это ...

INSERT INTO table2 SELECT * FROM table1 

Проблема в том, что у меня нет того же идентификатора, ... две таблицы подключены к третьей таблице table3. , в котором IDA содержит первичный ключ таблицы1, а IDB содержит первичный ключ таблицы2,

так, например, если я хочу скопировать из таблицы1 IDA (111) в таблицу2, как это сделать? и если IDB существует как обновить на дубликат ключа ...

У меня есть следующий запрос, но не работает ...

INSERT INTO table2 SELECT * FROM table1 
WHERE IDA IN (SELECT table1 b 
INNER JOIN table3 c ON c.IDA = b.IDA 
INNER JOIN table2 a ON a.IDB = c.IDB) 
WHERE b.IDA=111 

Но я хочу, если я получаю обобщают ответ ... Благодаря

+0

этот пост это поможет вам http://dba.stackexchange.com/questions/10472/join-three-tables – krishna

ответ

0
INSERT INTO table2 SELECT * FROM table1 
WHERE IDA IN (SELECT * FROM table1 b 
INNER JOIN table3 c ON c.IDA = b.IDA 
INNER JOIN table2 a ON a.IDB = c.IDB) HAVING b.IDA=111 
1
INSERT INTO table2 
SELECT 
    t3.idb 
    ,t1.colb as ncolb 
    ,t1.colc as ncolc 
FROM 
    table1 t1 
    join table3 t3 
    on t1.ida = t3.ida 
ON DUPLICATE KEY UPDATE 
    colb = ncolb 
    ,colc = ncolc 

нет MySQL на меня прямо сейчас, так синтаксис не может быть не 100% правильно, но это должно дать вам представление о том, как это должно быть сделано. В зависимости от того, есть ли у table3 запись для каждого table1 id, вам может потребоваться изменить t3.idb на coalesce(t3.idb, t1.ida) и изменить join на left join в запросе, если вы хотите, чтобы они были скопированы. Помните, что table2 будет иметь идентификаторы из table1)

0

попробовать это это может помочь вам

Три таблицы JOIN синтаксис SQL Вот общий SQL синтаксис запросов присоединиться к трем или более таблицы. Этот SQL-запрос должен работать во всей базе данных отношений, например. MySQL, Oracle, Microsoft SQLServer, Sybase и PostgreSQL:

SELECT t1.col, t3.col FROM table1 join table2 ON table1.primarykey = table2.foreignkey 
            join table3 ON table2.primarykey = table3.foreignkey 

Мы первый присоединиться к таблице 1 и таблице 2, которые производят временную таблицу с комбинированными данными из table1 и table2, который затем присоединился к Table3. Эта формула может быть расширена для более чем 3 таблиц в N таблицах. Вам просто нужно убедиться, что SQL-запрос должен иметь оператор объединения N-1, чтобы присоединиться к N таблицам. например, для объединения двух таблиц нам требуется 1 оператор объединения, и для объединения трех таблиц нам требуется 2 команды объединения.

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