SQL Server:选择表中与其他表中的行共享值的行

时间:2018-08-21 09:45:33

标签: sql sql-server

我已经搜索了问题,但找不到答案。也许我的措辞可能是错误的。我的问题如下:

给表用户

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 行,然后从表产品中获取具有代码匹配项的所有行先前获取的任何行的代码。

在SQL Server中这可能吗?最佳吗?

对于上面的示例,如果我获取前两行(所有者James和George),则应获得代码为777和432的所有产品。

5 个答案:

答案 0 :(得分:2)

是的,这很常见,叫做“ 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

答案 1 :(得分:2)

要选择第一个 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 :(得分:0)

尝试使用内部联接:

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

答案 3 :(得分:0)

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')

答案 4 :(得分:0)

即使代码不是唯一的,这仍然有效;

testFigure <- ggplot(data = final_df, aes(x=final_df$`ng DNA`, 
y=final_df$`count`)) + 
geom_point(col = "darkmagenta") + ggtitle("ng VS Number") + 
xlab(expression(paste("ng"))) + ylab("Num (#)") + 
theme(plot.title = element_text(hjust = 0.5, color="orange", size=18, 
face="bold.italic"),
    axis.title.x = element_text(color="#993333", size=10, face = "bold"),
    axis.title.y = element_text(color="#993333", size=10,face = "bold")) +  
scale_y_log10(breaks=c(0,10,50,200,600))

testFigure+scale_x_continuous(breaks=c(5,50,100,150,200,250,300,350,400)

用相关的N替换2