Использование Inner Join и возврат только 1 записи на матч слева - PullRequest
0 голосов
/ 05 июня 2019

Я не знаю, почему я не могу понять это банкомат. Вот очень надуманный пример .

create table Dog (
  [Name] varchar(10), 
  [BreedId] int
);

create table Breed (
  [BreedId] int,
  [Name] varchar(10)
);

insert into DOG (name, breedid)
VALUES ('Mix', 1),
  ('Mix2', 2),
  ('Mix2', 3);

insert into breed(breedid, name)
VALUES 
  (1, 'BullDog'),
  (1, 'Poodle'),
  (2, 'BullDog'),
  (2, 'Poodle'),
  (4, 'Poodle');

Следующее создает две строки, потому что таблица соединения имеет два совпадающих значения, я просто хочу одно значение , пока есть совпадающеезапись справа .

select d.*
from dog d
inner join breed b on d.breedid = b.breedid 

Результаты:

Микс 1

Микс 1

Микс 2

Mix 2

Есть ли способ сделать это в предложении объединения / без выполнения select в выражении where или другомварианты, такие как группировка по.

select d.*
from dog d
where d.breedid in (select breedid from breed)

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Попробуйте "выбрать отличное". Вы также можете группировать по столбцам, которые являются дубликатами, и брать max () столбцов с уникальными значениями.

Редактировать : как фильтровать по breed.breedid без использования оператора where.

select d.*
From dog as d
Inner join (select distinct breedid from breed) as b on b.breedid = d.breedid
0 голосов
/ 05 июня 2019

Я бы использовал exists, если вам нужны только столбцы из dog:

select d.*
from dog d
where exists (select 1 from breed b where d.breedid = b.breedid);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...