Правильный синтаксис соединения, чтобы соединить только те строки из таблицы A, которые соответствуют таблице B - PullRequest
0 голосов
/ 31 декабря 2018

Моя цель

Я пытаюсь объединить таблицу A и таблицу B.

Я хочу перечислить всех людей, которые живут в каждойулица в таблице A. Но я не хочу перечислять всех в таблице A, только людей, которые живут на каждой улице в таблице B.

Что я пробовал

  • Внутреннее соединение на A и B: возвращает только первое лицо по каждому адресу
  • Left Join: возвращает всех
  • Right Join: возвращает дваулицы от B, первое лицо по каждому адресу

Таблица A

Fred    123 Fake Street
Bob     456 Any Street
Alice   456 Any Street
Jenny   879 Spring Street
Cassie  879 Spring Street
Spinner 227 Nothing Street
Ranger  227 Nothing Street
Swifty  227 Nothing Street
Loggy   821 Victory Way

Таблица B

227 Nothing Street
456 Any Street

Результат запроса (некоторый тип объединения)

Spinner 227 Nothing Street
Ranger  227 Nothing Street
Swifty  227 Nothing Street
Bob     456 Any Street
Alice   456 Any Street

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

An INNER JOIN отлично работает:

SELECT a.*
FROM tableA a
JOIN tableB b ON b.address = a.address

Вывод:

name    address
Bob     456 Any Street
Alice   456 Any Street
Spinner 227 Nothing Street
Ranger  227 Nothing Street
Swifty  227 Nothing Street

Демонстрация на dbfiddle

0 голосов
/ 31 декабря 2018

Вы, кажется, хотите:

select a.*
from a
where exists (select 1 from b where b.address = a.address);

Вы можете сделать то же самое с inner join.Я понятия не имею, что вы подразумеваете под «Внутренним соединением на А и В: возвращает только первое лицо по каждому адресу».Это просто неверно.

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