[英]match multiple columns to multiple-row subquery?
我仍在学习有关mySQL的知识(实际上我仍然只能接受基本查询,计数,排序等)。 这个问题很可能已经被问过了,但是我不知道要搜索什么,或者我对于一个新手来说太了解了答案:
我有两个表:
tb1 (a,b,path)
tb2 (a,b,value)
我想对a,b与tb2上的不同查询匹配的tb1中的每一行返回“ path”的查询。 在糟糕的mysql中,它将类似于:
select
path
from tb1
where
a=(select a from tb2 where value < v1)
and
b=(select b from tb2 where value < v1);
但是,这不起作用,因为子查询返回多个值。 请注意,通过in
交换=
by还不够好,因为对于a,b值的组合( select a,b from tb2 where value < v1
未返回)是不select a,b from tb2 where value < v1
基本上,我已经基于tb2在(a,b)空间中确定了一个有趣的区域,并想研究tb1在该区域内的行为(如果可以更清楚地了解)。
谢谢 :)
这是一个工作一个INNER JOIN
两个a
和b
:
SELECT
path
FROM
tb1
INNER JOIN tb2 ON tb1.a = tb2.a AND tb1.b = tb2.b
/* add your condition to the WHERE clause */
WHERE tb2.value < v1
SELECT
列表或WHERE
子句中的子查询的用例通常可以使用某种类型的JOIN
进行处理。 由于使用SELECT
或WHERE
子查询时,可能需要为返回的每一行执行子查询,而不是只执行一次,因此联接通常会比子查询快。
除了上面链接的关于JOIN
的MySQL文档之外,我还建议Jeff Atwood的SQL JOIN的可视化解释。
INNER JOIN将解决问题。
您只需要两个ON
条件即可同时匹配a和b值,如下所示:
SELECT path
FROM tb1
INNER JOIN tb2 ON tb1.a = tb2.a AND tb1.b = tb2.b
WHERE tb2.value < v1
您可以通过以下方式限制结果集:
select
path
from tb1
where
a=(select a from tb2 where value < v1 LIMIT 1)
and
b=(select b from tb2 where value < v1 LIMIT 1);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.