作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我仍在大量学习 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);
但是,这不起作用,因为子查询返回多个值。请注意交换 =
通过 in
不够好,因为对于 select a,b from tb2 where value < v1
未返回的 a、b 值的组合来说也是如此
基本上,我已经在基于 tb2 的 (a,b)-space 中确定了一个有趣的区域,并且想研究 tb1 在该区域内的行为(如果这样可以使它更清晰的话)。
谢谢你:)
最佳答案
这是一份工作 for an 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's Visual Explanation of SQL JOINs
关于mysql - 将多列匹配到多行子查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10833743/
我是一名优秀的程序员,十分优秀!