2013-04-10 7 views
0

Я столкнулся с проблемой при соединении таблиц, есть условие, связанное с объединением двух таблиц .. У меня есть три таблицы, допустим, что это table1, table2 & Таблица3,объединение таблиц на основе значений полей

table1 
+---+ 
|id | 
+---+ 

table2 
+---------------+ 
|id | table1_id | 
+---------------+ 

table3 
+----------------------------+ 
| id | table1_id | table2_id | 
+----------------------------+ 

Теперь, господин мой стол «Таблица3», мне нужно, чтобы присоединиться к мастер-таблицу с table1 & table2 таким образом, что если значение table2_id существует в Table3 тогда table2 должны быть соединены с table2_id & Аналогично, если table1_id завершает работу, то таблица 1 будет соединена с таблицей 1_id, например: запись в таблицу 3 таким образом

+----------------------------+ 
| id | table1_id | table2_id | 
| 1 |  1  |  0  | 
| 2 |  0  |  1  | 
+----------------------------+ 

for the value of id = 1, 
table1_id exists & table2_id is zero, so table1 should be joined, 
for the id = 2, 
table2_id exists & table1_id is zero, so table2 should be joined, 
if there is a case that both exists then table2 should be given the priority i.e, the table2 will be joined, can anyone make me out of this prb pls.. 
+0

Я немного смущен, о каких столах присоединяются где. Вы, кажется, говорите, что если есть совпадение между таблицей 2 и таблицей3, тогда соедините таблицу1 с таблицей 3, и если есть совпадение между таблицей 1 и таблицей 3, тогда соедините таблицу2 с таблицей 3. Вы можете дать пару строк примера? – Kickstart

+0

hi Kickstart Я изменил свой вопрос..pls есть luk – kumar

ответ

0

вы можете попробовать сделать процедуру, в которой вы можете поместить условия и выполнить запрос в соответствии с вашим условием.

0

Возможно, вы можете сделать это с помощью LEFT JOIN, а затем отсортировать полученные столбцы, необходимые с помощью оператора CASE.

В качестве примера вы можете сделать что-то подобное. Обратите внимание, что вам нужно будет повторить оператор CASE для каждого поля, которое вы хотите вернуть.

SELECT table3.id, CASE table2.id IS NULL THEN table1.field ELSE table2.field END AS field 
FROM table3 
LEFT OUTER JOIN table2 ON table3.table2_id = table2.id 
LEFT OUTER JOIN table1 ON table3.table1_id = table1.id 
Смежные вопросы