Я искал вопросы, но не смог найти ответ. Возможно, моя формулировка может быть неправильной. Моя проблема заключается в следующем:
Данная таблица Пользователи :
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.
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
.
Да, это обычное дело, называется "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. жерех
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')
Это работает, даже если код не уникален;
select * from Products where code in
(
select top 2 code from users order by id
)
Заменить 2 на соответствующий N
Попробуйте это с Inner join:
Select products.product_name,users.owner FROM products inner JOIN users ON products.code=users.code
where users.code in (777,432)
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.