【问题标题】:Select from table if other table points to record [duplicate]如果其他表指向要记录,则从表中选择[重复]
【发布时间】:2017-03-29 13:32:55
【问题描述】:

我的数据库中有两个表

 ---------               ---------
|    A    |             |    B    |
|---------|             |---------|
| id      |             | id      |
| name    |             | a_id    |
 ---------              | name    |
                         ---------

我只想选择表A 中的所有记录,前提是表B 中有一条记录指向表A 中的记录(B.a_id = A.id)。

我怎样才能做到这一点?我想要一个解释,以便我了解它是如何完成的。

【问题讨论】:

  • ... id in (select ... from b)
  • 我觉得问这个很愚蠢...我正在从事其他人的一个非常古老的项目。在向内部连接解决方​​案提出这个问题之前,我更改了查询,但它没有任何效果。结果他通过 ajax 调用重新填充了列表框(带有 sql 查询的结果)。所以无论我做什么,结果都是一样的。 ://

标签: mysql sql


【解决方案1】:

使用INNER JOIN

SELECT DISTINCT A.*
FROM A
    INNER JOIN B ON B.a_id = A.id

由于INNER JOIN,对于表A 中的每一行,MySQL 会查找B 中与JOIN 条件(B.a_id = A.id) 匹配的所有行。

SELECT 子句指示它仅返回表 A (A.*) 中的列,但由于 JOINA 中的一行可以匹配 B 中的多个行。 DISTINCT 子句注意避免在结果集中多次出现相同的输出行。

【讨论】:

  • DISTINCT 也会无意中删除重复的 A 行(如果有的话。)
【解决方案2】:
SELECT *
FROM a
WHERE id IN (SELECT a_id from b)

【讨论】:

    【解决方案3】:

    这是一个基本的INNER JOIN

    SELECT a.*
    FROM a
    INNER JOIN b ON a.ID = b.a_ID
    

    内连接将从指定表中选择与连接条件匹配的所有记录(ON 运算符)。

    【讨论】:

    • 如果在 b 中发现两次相同的 id,将返回重复的行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 2017-07-17
    • 2013-08-21
    • 2012-05-25
    • 2013-11-16
    • 1970-01-01
    相关资源
    最近更新 更多