我已经搜索了问题,但找不到答案。也许我的措辞可能是错误的。我的问题如下:
给表用户:
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的所有产品。
答案 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)
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