2

我仍然非常了解 mySQL(我仍然只对基本查询、计数、排序等感到满意)。很可能以前有人问过这个问题,但是我不知道要搜索什么,或者我太新手了,无法理解答案:

我有两张桌子:

tb1 (a,b,path)
tb2 (a,b,value)

我想做一个查询,为 tb1 中的每一行返回“路径”,其 a,b 与 tb2 上的不同查询匹配。在坏的mysql中,它会是这样的:

select
 path 
from tb1
 where
 a=(select a from tb2 where value < v1) 
and
 b=(select b from tb2 where value < v1); 

但是,这不起作用,因为子查询返回多个值。请注意,交换=byin还不够好,因为对于不是由select a,b from tb2 where value < v1

基本上,我已经根据 tb2 在 (a,b) 空间中确定了一个有趣的区域,并且想研究 tb1 在该区域内的行为(如果这样更清楚的话)。

谢谢你 :)

4

3 回答 3

4

这是和INNER JOIN工作:ab

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. 由于使用SELECTorWHERE子查询时,可能需要对返回的每一行执行子查询,而不是只执行一次,因此连接通常会比子查询快。

除了上面链接的 MySQL 文档JOIN之外,我还推荐Jeff Atwood 的 SQL JOIN 视觉解释

于 2012-05-31T12:38:29.810 回答
1

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

于 2012-05-31T12:37:35.303 回答
0

您可以通过以下方式限制结果集:

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); 
于 2012-10-11T22:11:09.217 回答