在 MySQL 中:
如果我们有两个表:
comments
key | value
=================
1 | foo
2 | bar
3 | foobar
4 | barfoo
and:
meta
comment_key | value
=========================
1 | 1
2 | 1
3 | 2
4 | 1
我想得到来自以下人士的评论comment
有对应的表comment_key
in the meta
有特定的表value
(the value
栏目中的meta
table).
例如,我想从comment
表有一个value
of 1
in the meta
table:
我期望这些结果:
key | value
=================
1 | foo
2 | bar
4 | barfoo
如果我要从comment
表有一个value
of 2
in the meta
table:
我期望这个结果:
key | value
=================
3 | foobar
真心希望有人能帮忙,先谢谢大家了!
我想我需要加入吗?任何指示都会很棒,如果可能的话,一个简短的解释,这样我就可以找出我哪里出错了->这样我下次就会知道了!
我实际上不会推荐为此使用 JOIN — 或者更确切地说,我会推荐“semijoin http://en.wikipedia.org/wiki/Relational_algebra#Semijoin”,这是一个关系代数概念,不能直接用 SQL 表达。半联接本质上是一种联接,您希望仅从一个表中检索记录,但条件是它们在不同的表中具有相应的记录。
在 SQL 表示法中,这个概念是通过使用间接表达的an IN clause http://dev.mysql.com/doc/refman/5.6/en/any-in-some-subqueries.html,有一个subquery http://dev.mysql.com/doc/refman/5.6/en/subqueries.html:
SELECT key, value
FROM comments
WHERE key IN
( SELECT comment_key
FROM meta
WHERE value = 1
)
;
(MySQL 实际上最终会在内部将其转换回半连接——本质上是一种退化的内连接——但是IN
子句是在原始 SQL 中表达它的自然方式。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)