2016-12-02 2 views
0

Так что я просто не могу найти хороший способ сделать один запрос и получить то, что мне нужно. У меня есть 2 стола.SQL-запрос с внешним ключом

первый стол

cure 
---- 
code (PK) 
name 

второй стол

interaction 
------------ 
cure_code1 (FK) 
cure_code2 (FK) 
interaction 

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

ответ

0

Что может быть отключение вас в том, что вы должны присоединиться к cure таблице дважды, один раз для каждого внешнего ключа:

SELECT 
    c1.name AS first_cure, 
    c2.name AS second_cure, 
    i.interaction 
FROM 
    interaction i 
JOIN 
    cure c1 ON i.cure_code1 = c1.code 
JOIN 
    cure c2 ON i.cure_code2 = c2.code 

В этом запросе мы присоединяемся к cure два раза, но дать каждому из своих собственных псевдоним (c1 или c2), чтобы столбцы были неоднозначными.

Если ваше приложение потенциально может иметь n, то ваша текущая структура таблицы не будет работать. Вам понадобится третья таблица, в которой есть код взаимодействия и код излечения, чтобы вы могли делать много-много картирование.

+0

lol Я попытался сделать это с одним соединением, это было легче, чем я ожидал, спасибо! и да, я не настолько глуп, полностью понимаю урский вопрос: D – Tomek

+0

почему это не сработает? приложение будет иметь n излечений, но одно излечение может реагировать только один раз на другого. – Tomek

+0

Вы действительно могли бы сделать это с одним соединением, но вам понадобится 'OR' для каждого ограничения JOIN или инструкции IN. Таким образом, это просто чистая ИМО. –

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