mysql - 从表中选择行,其中具有相同 ID 的另一个表中的行在另一列中具有特定值

标签 mysql sql select join

在 MySQL 中:

如果我们有两个表:

comments
key    |    value
=================
1      |    foo
2      |    bar
3      |    foobar
4      |    barfoo

和:

meta
comment_key    |    value
=========================
1              |    1
2              |    1
3              |    2
4              |    1

我想从 comment 获得评论具有相应 comment_key 的表在 meta具有特定 value 的表(value 表中的 meta 列)。

例如,我想从 comment 中选择所有行具有 value 的表的 1meta表:

我希望得到这些结果:

key    |    value
=================
1      |    foo
2      |    bar
4      |    barfoo

如果我要从 comment 中选择所有行具有 value 的表的 2meta表:

我希望得到这样的结果:

key    |    value
=================
3      |    foobar

真的希望有人能帮忙,提前谢谢大家!

我想我需要加入吗?任何指针都会很棒,如果可能的话,一个简短的解释,这样我就可以找出我哪里出错了 -> 下次我会知道的!

最佳答案

我实际上不建议为此使用 JOIN — 或者更确切地说,我建议使用“semijoin”,这是一个不直接用 SQL 表达的关系代数概念。半联接本质上是一种联接,您只想从一个表中检索记录,但条件是它们在不同的表中具有相应的记录。

在 SQL 表示法中,这个概念是通过使用 an IN clause 间接表达的。 , 带有 subquery :

SELECT key, value
  FROM comments
 WHERE key IN
        ( SELECT comment_key
            FROM meta
           WHERE value = 1
        )
;

(MySQL 实际上最终会在内部将其转换回半连接——本质上是一种退化的内连接——但 IN 子句是在原始 SQL 中表达它的自然方式。)

关于mysql - 从表中选择行,其中具有相同 ID 的另一个表中的行在另一列中具有特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9105427/

相关文章:

sql - 如何在 Postgresql 中使用 ALTER 将 VARCHAR 类型更改为 DATETIME?

javascript - 有没有办法通过选择将 "suffix"附加到 javascript 函数?

C# 在winform上显示来自sql server的表

mysql - 使用文件系统与 RDMBS (MySQL) 的并发处理

mysql - 将变量类型声明为具有默认值的 varchar

java - Java MySQL executeUpdate() 为 INSERT ON ON DUPLICATE KEY UPDATE 返回什么?

php - 在 PHP while 循环中创建电子邮件正文变量

mysql - 按月查找 MySQL 中的条目数

android如何做一个select和where join语句

javascript - 根据在 javascript 和 asp.net 中选中的复选框禁用/启用 HtmlSelect