mySQL子查询-如果可能,单次通过

mySQL子查询-如果可能,单次通过,mysql,subquery,Mysql,Subquery,我希望执行一个查询,从mySQL中的许多表返回数据,这些表需要一些子查询,但是我不确定我试图实现的目标是否可能在一个过程中实现 我有下面的例子(我知道这不起作用,但给你一个想法) 这将根据主表中的2个不同列从第二个表中提取2个条目 tablea ---------- field_id, bigint field_1, varchar(50) field_2, int field_3, bigint field_4, bigint tableb ---------- subfield_id, b

我希望执行一个查询,从mySQL中的许多表返回数据,这些表需要一些子查询,但是我不确定我试图实现的目标是否可能在一个过程中实现

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

这将根据主表中的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)

只有在子查询返回一行的情况下,您才可能尝试实现。 举个例子

    (SELECT subfield_1 FROM tableb     WHERE subfield_id = field_3) 

字段3应该是表B的主键

使用
JOIN
s。根据
field_3
field_4
是否为
NULL
可以使用
左连接
(如下例)或
内部连接

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) | |字段| ID |字段| 1 |字段| A |字段| B| |----------|---------|-----------|-----------| |1 | 11 |子值1 |子值5| |2 | 22 |子值4 |子值2| |3 | 33 |子值2 |(空)| 注意:确保在
字段3
字段4


这里是演示

您可以执行
外部联接
,在这里您将看到相同的结果,而不必延迟使用
相关子查询

外部联接的优点是,无论
tableb
子查询中是否有伴随值,都将显示
tablea
中的所有行

普通联接只返回所有三个表都包含
field_3
field_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;

@用户2843145它有帮助吗?你的问题需要更多的帮助吗?
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;