2016-08-10 7 views
0

Мне нужно объединить несколько таблиц для данных, которые я хочу. Тем не менее, два поля существуют в отдельных таблицах, которые при выполнении запроса возвращают декартово произведение, сильно увеличивая фактическое количество моих данных. Мне нужен другой столбец из двух разных таблиц. Я могу написать два отдельных запроса, а затем извлечь данные в Excel и манипулировать им там (что я сделал), но там должен быть более эффективный способ.Мне нужно написать инструкцию SQL с подзапросом и несколькими внутренними соединениями

Могу ли я написать суб-запрос, чтобы обойти это? Если да, где бы я написал суб-запрос?

SELECT a.field 
      ,b.field 
      ,c.field 
      ,d.field 
    FROM table a 
    INNER JOIN table b 
    ON... 
    INNER JOIN table c 
    ON... 
    INNER join table d 
    ON... 
    WHERE... 

Приведенный выше запрос приводит к декартовому продукту. Я использую SQUIRREL.

Спасибо!

+2

Структура таблицы, данные образца и ожидаемые результаты были бы полезными. – sgeddes

+0

вы можете подзапросом следующим образом: SELECT a.field, b = (SELECT b.field from b где b.JOINFIELD = a.JOINFIELD) FROM a – AlexT82

+0

@sgeddes [Вот лучшее, что я могу сделать супер быстро] (http: //imgur.com/AHjvPof) – firstinten

ответ

0

Отсутствующие критерии?

Вы присоединяетесь связаны a, b, c и d записи и показать их. В этом нет ничего плохого. Если вы умножаете количество записей, это может быть связано с тем, что вы забыли критерии в своих предложениях ON. Скажем, таблица d связана с таблицами a и b, тогда вам нужно ON d.id_a = a.id and d.id_b = b.id. Забывание одного из двух критериев приводит к умножению данных.

Несвязанные данные?

Другая возможность заключается в том, что две таблицы не связаны. Скажем, таблица c и d связаны с таблицей a и содержат несколько записей с подробными данными, но они не связаны друг с другом. Затем в вашем запросе будут перечислены все комбинации c и d за a (например, продукт, купленный у нескольких поставщиков и проданный в нескольких магазинах, и ваш запрос объединяет всех поставщиков, которые продают продукт X со всеми магазинами, продающими продукт X). В этом случае вам нужно будет подумать о том, что ваш запрос должен действительно показать - или, может быть, вам нужны два отдельных запроса.