Предположим, у нас есть 4 таблицы A, B, C, D в Некоторая неопределенная реляционная база данных SQL. Ссылки B, а также C и D. Ссылки означают, что A имеет столбец A.refX_id = X.id, X - A, B и C (общий внешний ключ 1: N).SELECT ... WHERE IN vs JOIN
Что я хочу, это запрос таблицы A с условием на основе столбцов из всех дочерних таблиц B, C и D. Мой вопрос: Какие из следующих вариантов лучше? (. С точки зрения удобства, эффективности, скорости)
Вариант 1:
SELECT DISTINCT A.* FROM A
JOIN B ON A.refB_id = B.id
JOIN C ON A.refC_id = C.id
JOIN D ON A.refD_id = D.id
WHERE <condition on B> AND <condition on C> AND <condition on D>;
Что мне больше нравится с точки зрения базы данных, но выглядит немного сложнее программировать.
Вариант 2:
SELECT id FROM B WHERE <condition on B>; # result store to array "BIds" on program side
SELECT id FROM C WHERE <condition on C>; # result store to array "CIds" on program side
SELECT id FROM D WHERE <condition on D>; # result store to array "DIds" on program side
SELECT A.* FROM A
WHERE refB_id IN (<B_ids>) AND refC_id IN (<C_ids>) AND refD_id IN (<D_ids>);
# <B_ids> menas expand whole array of ids, which can result in a very long query string
Я думал, что Вариант 2 является completelly головня и непригодным для использования с потенциально большими данными. Но я слышал, что многие фреймворки обычно используют его, потому что это относительно просто. Является ли это законным способом запроса таких данных в общем случае, если я знаю, что содержимое предложения «IN» взято из результата другого запроса (-ов)?
просто смотрел этот самый вопрос и нашел этот ответ: http://stackoverflow.com/questions/121631/inner-join-vs-where? rq = 1 – CodeJockey