0

我正在寻找执行一个查询,该查询将从 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)
4

3 回答 3

0

只有当您的子查询返回一行时,您想要实现的目标才有可能。例如这里

    (SELECT subfield_1 FROM tableb     WHERE subfield_id = field_3) 

字段 3 应该是 tableb 的主键

于 2013-10-04T09:03:23.133 回答
0

使用JOINs。取决于是否field_3以及field_4是否NULL能够使用LEFT JOIN(如下例所示)或INNER 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 | 字段_A | 字段_B |
|---------|---------|------------|-----------|
| 1 | 11 | 子值1 | 子值5 |
| 2 | 22 | 子值4 | 子值2 |
| 3 | 33 | 子值2 | (空) |      

注意:确保您在field_3field_4

这是SQLFiddle演示

于 2013-10-04T09:04:04.950 回答
0

您可以执行 a outer join,您将看到相同的结果,而不必延迟使用 a correlated subquery

外连接的优点tablea是显示来自的所有行,而不管子查询中是否有伴随值tableb

相反,普通连接只会返回所有三个表都包含field_3andfield_4的行,因此不会返回 field_id = 3 的行。

例子:

SELECT field_id,
       field_1,
       s1.subfield_1 as field_a,
       s2.subfield_1 as field_b
FROM tablea AS a
LEFT JOIN tableb AS s1 ON a.field_3 = s1.subfield_id
LEFT JOIN tableb AS s2 ON a.field_4 = s2.subfield_id
WHERE field_2 = 123;
于 2013-10-04T09:06:13.230 回答