mySQL 子查询 - 如果可能的话单次传递

标签 mysql subquery

我希望执行一个查询,该查询将从 mySQL 中的多个表返回数据,这将需要一些子查询,但我不确定我想要实现的目标是否可以在一次传递中实现。

我有下面的例子(我知道这不起作用,但给了你想法)

SELECT field_id, field_1, 
  (SELECT subfield_1 FROM tableb WHERE subfield_id = field_3) AS field_a, 
  (SELECT subfield_1 FROM tableb WHERE subfield_id = field_4) as field_b 
FROM tablea WHERE field_2 = 123

这将根据主表中的 2 个不同列从第二个表中提取 2 个条目。

tablea
----------
field_id, bigint
field_1, varchar(50)
field_2, int
field_3, bigint
field_4, bigint

tableb
----------
subfield_id, bigint
subfield_1, varchar(50)

最佳答案

使用JOIN。根据 field_3field_4 是否支持 NULL,使用 LEFT JOIN(如下例所示)或内连接

SELECT field_id, field_1, b1.subfield_1 field_a, b2.subfield_1 field_b
  FROM tablea a LEFT JOIN tableb b1 
    ON a.field_3 = b1.subfield_id LEFT JOIN tableb b2
    ON a.field_4 = b2.subfield_id
 WHERE a.field_2 = 123

示例输出:

| FIELD_ID | FIELD_1 |   FIELD_A |   FIELD_B |
|----------|---------|-----------|-----------|
|        1 |      11 | subvalue1 | subvalue5 |
|        2 |      22 | subvalue4 | subvalue2 |
|        3 |      33 | subvalue2 |    (null) |      

注意:确保您在 field_3field_4 上有索引

这里是SQLFiddle 演示

关于mySQL 子查询 - 如果可能的话单次传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19176927/

相关文章:

php - 我如何在 CakePHP 中按 'votes' 排序?

php - 如何对 MySQL BOOLEAN 列进行计数

mysql - 连接与子查询

mysql - 我们可以使用 like 运算符并选择查询作为其输入吗?

mysql - 在 mysql 中使用 subselect 更新列时遇到问题

mysql.h 丢失....(Ruby on Rails,OSX)

php - 单击按钮时返回每个查询的记录

mysql - 删除 mysql 中的行会降低 CPU 使用率吗?

mysql - 为另一个表中的每个 ID 在表中插入行

php - 带系统时间戳的嵌套 SQL 查询