如何在两个表上进行选择,然后将它们连接到mySQL中

问题描述 投票:0回答:2

我有两个表,A和B.表A有两列,“ID”和“年龄”。表B有两列,“ID”和“等级”。我想选择年龄> 25的A行,B中等级<90的行,然后将结果连接在一起。

在R中,这可以通过以下代码实现:

library(dplyr)
A = data.frame("ID"=1:10,
               "age"=21:30)

B = data.frame("ID"=1:20,
               "Grade"=81:100)

sub_A = filter(A, age > 25)
sub_B = filter(B,Grade<90)

result = inner_join(sub_A,sub_B,by="ID")

如何在mySQL中做同样的事情?更具体地说,mySQL中有一种方法可以将查询结果存储到新变量(如sub_A和sub_B)中,然后将sub_A和sub_B连接在一起吗?

我尝试使用“CREATE TEMPORARY TABLE”但我没有权限在数据库中创建临时表。

mysql r database dplyr
2个回答
2
投票

可以连接两个子查询:

select *
from (
    select *
    from table_a 
    where age > 25
) sub_a
inner join (
    select *
    from table_b
    where grade < 90
) sub_b using(ID)

但没有必要这样做。您可以只加入两个表(在ID上)并过滤同一WHERE子句中的数据:

select *
from table_a a
join table_b b using(ID)
where a.age   > 25
  and b.grade < 90

0
投票

OP使用dplyr来展示他想要使用mySQL实现的预期结果。

为了完整起见,并且因为data.table的语法是similar to SQL,我想说明如何使用data.table以两种方式实现OP的要求:

library(data.table)

# filter/select before merge
merge(setDT(A)[age > 25], setDT(B)[Grade < 90])

# filter/select after  merge
merge(setDT(A), setDT(B))[age > 25 & Grade < 90]

两个语句都返回相同的结果:

   ID age Grade
1:  6  26    86
2:  7  27    87
3:  8  28    88
4:  9  29    89
© www.soinside.com 2019 - 2024. All rights reserved.