SQL Join с использованием таблицы соединений из рельсов

Итак, я не уверен, что лучший способ сделать соединение для этих таблиц. Я хочу использовать JOIN, потому что считаю, что это быстрее, чем вводить все три таблицы в FROM. Итак, если у меня есть три таблицы...

Table1
--id
--data

Table2
--id
--data

Table1_Table2
--table1_id
--table2_id

Как я могу выполнить соединение для этих данных с помощью таблицы соединений?


person Red    schedule 23.05.2012    source источник


Ответы (2)


Упоминание всех таблиц в предложении FROM также является неявным соединением. Не рекомендуется использовать его, так как это может привести к декартовому произведению задействованных таблиц, если вы забудете добавить предикаты в предложении WHERE.

Ознакомьтесь с статьей Википедии о ПРИСОЕДИНЕНИИ, а также с этой очень хороший пост в блоге о соединениях Джеффа Этвуда.

Я думаю, что вас интересует INNER JOIN между таблицами, хотя существуют и другие варианты. Попробуй это:

SELECT t1.*, t2.*
  FROM Table1 t1
  INNER JOIN Table1_Table2 tt ON t1.id = tt.table1_id
  INNER JOIN Table2 t2 ON t2.id = tt.table2_id;

Я пропустил столбцы Table1_Table2 из списка выбора, так как там нет ничего особенного.

person vyegorov    schedule 23.05.2012

Хотя приведенное выше решение работает, вы можете попробовать решение для железных дорог.

Поскольку вам нужна таблица соединения только с первичными ключами участвующих таблиц, вы можете перейти к имеет_и_принадлежит_ко_многим ассоциации. Он делает то же самое, что и SQL-запрос за кулисами, и является более изящным решением. Вы также можете заглянуть в ассоциацию has_many through (также объясняется в связанных трансляциях), если хотите добавить дополнительные столбцы в таблицу соединения.

person Mark    schedule 23.05.2012