Я искал вопросы, но не смог найти ответ. Возможно, моя формулировка может быть неправильной. Моя проблема заключается в следующем:

Данная таблица Пользователи :

ID      code       owner
 1       777       James
 2       432      George
 3       111        Kale

И таблица Продукты :

ID      product_name        code
 1             chair         777
 2             table         777
 3               fan         432
 4           monitor         777
 5              sofa         111
 6               bed         111

Мне нужен запрос, который выбирает N количество строк из таблицы Users , а затем выбирает все строки из таблицы Products , которые имеют код, соответствующий коду Любая строка, выбранная ранее.

Возможно ли это в SQL Server? Это оптимально?

Для приведенного выше примера, если я получу первые 2 строки (владельцы Джеймс и Джордж), я должен получить все продукты с кодами 777 и 432.

0
Gilbert Nwaiwu 21 Авг 2018 в 12:45

5 ответов

Лучший ответ

Чтобы выбрать первых n (здесь 2 ), пользователи используют TOP. Поместите это в подзапрос и LEFT JOIN products в общем коде к нему.

SELECT *
       FROM (SELECT TOP 2
                    *
                    FROM users
                    ORDER BY id) u
            LEFT JOIN products p
                      ON p.code = u.code;

Если вы хотите, чтобы пользователи, у которых нет хотя бы одного продукта, исчезли, вы можете заменить LEFT JOIN на INNER JOIN.

2
sticky bit 21 Авг 2018 в 10:26

Да, это обычное дело, называется "Joins"

Например, это даст вам ответ:

Select products.product_name,users.owner FROM products LEFT JOIN users ON products.code=users.code

Вы можете прочитать больше о JOINS здесь: https://www.w3schools.com/sql/sql_join. жерех

2
hortig 21 Авг 2018 в 09:51

enter image description here

Create table #Users
(
    Id int Identity(1,1),
    Code varchar(100),
    Owner varchar(100)
)

Create table #Products
(
    Id int Identity(1,1),
    ProductName varchar(100),
    Code varchar(100)
)


insert Into #Users(Code,Owner)
Select '777','James'


insert Into #Users(Code,Owner)
Select '432','George'

insert Into #Users(Code,Owner)
Select '111','Kale'


insert Into #Products(ProductName,Code)
Select 'Chair','777'

insert Into #Products(ProductName,Code)
Select 'Table','777'

insert Into #Products(ProductName,Code)
Select 'fan','432'

insert Into #Products(ProductName,Code)
Select 'monitor','777'

insert Into #Products(ProductName,Code)
Select 'Sofa','111'

insert Into #Products(ProductName,Code)
Select 'bed','111'

select * from #products


select * from #Products Left join #Users on #Users.Code=#Products.Code Where Owner in ('James','George')
0
gulshan arora 21 Авг 2018 в 10:02

Это работает, даже если код не уникален;

select * from Products where code in
 (
  select top 2 code from users order by id
 )

Заменить 2 на соответствующий N

0
Taemyr 21 Авг 2018 в 10:32

Попробуйте это с Inner join:

Select products.product_name,users.owner FROM products inner JOIN users ON products.code=users.code
where users.code in (777,432)
0
Fahmi 21 Авг 2018 в 09:52
51945921