我希望执行一个查询,该查询将从 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_3
和 field_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_3
和 field_4
上有索引
这里是SQLFiddle 演示
关于mySQL 子查询 - 如果可能的话单次传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19176927/