我有两个表,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”但我没有权限在数据库中创建临时表。
可以连接两个子查询:
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
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