Помощь с Joins - PullRequest
       2

Помощь с Joins

0 голосов
/ 05 января 2011

моя первая таблица содержит около 18K записей

так, когда я

select * from table2 я получаю около 18k

Я пытаюсь сделать соединение следующим образом, но я возвращаюсь на 26K назад ... что я делаю не так? я думаю, что он должен вернуть все "правильные" записи таблицы, а также показать мне, какое значение соответствует первому в отдельном столбце ...

Select t1.fID , t2.*
FROM table1 t1 right join table2 t2 on t1.fName = t2.f

вот пример моих таблиц:

Таблица 1: FID, FName

таблица 2: id, f, адрес и т. Д.

мне нужно получить все записи из таблицы 2 со столбцом fID всякий раз, когда f = fName

Ответы [ 4 ]

3 голосов
/ 05 января 2011

В таблице table1 есть много строк со значением fname, совпадающим в таблице 2.

Например, скажем, 5k строк table2 не имеют совпадающих строк в table1, у вас в среднем 2 строки в таблице 1 для каждогоиз оставшихся 13k строк table2

Поскольку вы также запросили столбец для table1, это произойдет.Вы заметите несколько значений t1.fId для данного t2.fname.Или NULL

2 голосов
/ 05 января 2011

Если t1.fName и t2.f не являются уникальными идентификаторами для своих таблиц, вы обнаружите, что строки из таблицы1 объединяются с несколькими строками из таблицы 2.

0 голосов
/ 05 января 2011

Это возможно, когда некоторые значения fName повторяются в Таблице 2 и / или Таблице 1.

Запустите эти запросы и посмотрите:

SELECT fName, COUNT(1) FROM Table2 GROUP BY fName HAVING COUNT(1) > 1

SELECT fName, COUNT(1) FROM Table1 GROUP BY fName HAVING COUNT(1) > 1
0 голосов
/ 05 января 2011

Ключевое слово RIGHT JOIN Возвращает все строки из правой таблицы (table_name2), даже если в левой таблице нет совпадений (table_name1). См. Правое соединение

Так выглядитнапример, у вас неправильно установлены критерии соответствия или нет совпадений.

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