Почему этот запрос генерирует так много данных? - PullRequest
0 голосов
/ 19 октября 2010

Err Я прошу прощения за заголовок, но я забыл, как на самом деле он называется в SQL SQL.

Дело в том, что этот запрос:

SELECT DISTINCT a.col1, a.col2,a.col3,c.col1, c.col2

FROM table1 a

LEFT JOIN table2 c ON a.col1 = c.col3

WHERE a.col2 = '038CQH'

Я получаю результат с примерно 56000 строк, но когда я проверил, используя:

SELECT a.col1, a.col2,a.col3 FROM table1 a where a.col2='038CQH'

, я получаю только 4 строки.

Ответы [ 3 ]

2 голосов
/ 19 октября 2010

Это потому, что ваши 4 записи из таблицы1 объединяются со многими записями в таблице2 на основе записей в таблице2, где col3 соответствует столбцу col1 из таблицы1. Кстати, это ужасные названия столбцов.

1 голос
/ 19 октября 2010

это левое соединение (left join на самом деле left outer join).Это значит - получить все записи из таблицы1 и все записи из таблицы2, но где a.col1! = C.col3, поставить нулевые значения во все столбцы таблицы 2.

Может быть, вам нужно внутреннее соединение?это только добавит столбцы из таблицы 2, где a.col1 = c.col3

0 голосов
/ 19 октября 2010

Немного другой подход - повторите запрос:

SELECT a.col1, a.col2,a.col3 FROM table1 a where a.col2='038CQH'

Запишите четыре значения a.col1, возвращаемых как [a1], [a2], [a3] и [a4].

Затем попробуйте выполнить следующий запрос к таблице 2:

SELECT DISTINCT c.col1, c.col2
table2 c WHERE c.col3 IN ([a1], [a2], [a3], [a4])

(где [a1] и т. Д. Были заменены ранее отмеченными значениями.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...