2017-02-18 7 views
0

У меня есть три таблицы (это демонстрационные таблицы, а не фактические). Я могу получить данные из test1 и test2 с помощью JOIN, но не могу получить данные из test3 в определенном состоянии.SQL Joins.Fetch данные из трех таблиц

В приведенных ниже таблицах ID3 = ID-ID2 (два идентификатора разделяются с использованием - и используются в качестве первичного ключа в test3).

Я хочу получить isShipped значение из test3, когда существует ID-ID2 (если существует) вместе со всеми столбцами в test1 и test2 (isShipped = default_value, когда в test3 не существует ID1-ID2).

enter image description here

+0

Пожалуйста, вы можете добавить foriegn ключевые ссылки тоже .....? –

+0

Просьба добавить образцы входных данных и выходных данных. это действительно поможет. – Tajinder

+0

Как вы делаете присоединение, он соединяет идентификатор test1 с идентификатором test2.Однако, нет идентификатора в test3, поэтому вы не можете присоединиться. –

ответ

0

Test3 не имеет никакого отношения к любой таблице. Вам требуется реализовать еще один уникальный находчивый идентификатор, чтобы сделать его существенным для корреляции связи между идентифицируемыми тремя таблицами, которые вы экстраполировали.

0

Вы хотите условие ID3 = ID - ID2 быть met.And вы хотите иметь все атрибуты из test1 и test2, для которых можно использовать full outer join и состояние вашего состояния в ИНЕКЕ, предполагая, что ваши идентификаторы являются целыми числами, и есть нет null. N: B: Это то, что вы делаете в базе данных Oracle. Измените его с помощью подобной семантики для MySQL, возможно, выполните поиск в Интернете.

SELECT c.isShipped 
FROM test1 a full outer join 
     test2 b, 
     test3 c 

WHERE c.ID3 = a.ID - b.ID2; 
+0

Нет полного соединения в mysql - есть ли у вас альтернатива mysql? Также id3 представляет собой составной ключ, составленный в форме id-id2. –

+0

Ну, я использую oracle sql.I считаю, что OP необходимо заменить полное внешнее соединение чем-то похожим в MySQL. –

+0

Вы используете неявные объединения в Oracle? –

0

На основании картины я предполагаю, что идентификаторы являются VARCHARS? Может быть, попробовать что-то вроде этого:

SELECT t3.ID3, t3.isShipped 
FROM test1 t1 
JOIN test2 t2 ON t1.ID = t2.ID 
JOIN test3 t3 ON t1.ID + '-' + t2.ID2 = t3.ID3; 

SQL Fiddle Here

+0

Можете ли вы сделать это с явным соединением, а не с отклонениями соединений implict? Также + не является concat-ярлыком в mysql. –

+0

Обновлен, чтобы отражать явные объединения. Основываясь на SQL Fiddle, кажется, что + работает как concat. – sschmitz

0

Для MySQL попробовать

select t1.*,t2.*,t3.isshipped 
from test1 t1 
join test2 t2 on t2.id = t1.id 
join test3 t3 on t3.id3 = concat(t2.id,'-',t2.id2) 
Смежные вопросы