簡體   English   中英

SQL Server:選擇表中與其他表中的行共享值的行

[英]SQL Server: Select rows in table that share value with rows in another table

我已經搜索了問題,但找不到答案。 也許我的措辭可能是錯誤的。 我的問題如下:

給定表Users

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

我需要一個查詢,該查詢從表Users中獲取N個行,然后從表Products中獲取所有行,這些產品的代碼與以前獲取的Any行的代碼匹配。

在SQL Server中可以嗎? 最佳嗎?

對於上面的示例,如果我獲取前兩行(所有者James和George),則應獲取所有代碼為777和432的產品。

是的,這很常見,稱為“ 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.asp

要選擇前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;

如果您想讓沒有至少一種產品的用戶消失,則可以用INNER JOIN代替LEFT JOIN INNER JOIN

嘗試使用內部連接:

Select products.product_name,users.owner FROM products inner JOIN users ON products.code=users.code
where users.code in (777,432)

在此處輸入圖片說明

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
 )

用相關的N替換2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM