如何使用 FROM 子句中的子查询优化 MariaDB 查询?

How do I optimize MariaDB query with subqueries in FROM clause?

想象一下这两个 table。

Table一个

ID col1 col2 col3
1  foo  baz  bar
2  ofo  zba  rba
3  oof  abz  abr

Table B

A_ID field_name field_value
1    first      Jon
1    last       Doe
2    first      Adam
2    last       Smith

等..

现在我想查询(当前查询是这样的)

SELECT 
    a.id, 
    a.col1, 
    a.col2, 
    (SELECT field_value FROM B WHERE A_ID = a.id AND field_name = 'first') as first_name, 
    (SELECT field_value FROM B WHERE A_ID = a.id AND field_name = 'last') as last_name
FROM A a
WHERE (SELECT COUNT(*) FROM B WHERE A_ID = a.id) = 2;

此查询有效。我想实现的是这样的。

SELECT 
  a.id,
  a.col1,
  a.col2,
  (SELECT field_value FROM b WHERE b.field_name = 'first') as first_name,
  (SELECT field_value FROM b WHERE b.field_name = 'last') as last_name
FROM
  A a,
  (SELECT field_value, field_name FROM B WHERE A_ID = a.id) b
WHERE (SELECT COUNT(*) FROM b) = 2;

我的方法看起来如何正确?有没有其他方法可以摆脱 table B 的多次查询?

谢谢!

我会用连接替换你的相关子查询:

SELECT 
    a.id, 
    a.col1, 
    a.col2,
    b1.field_value AS fv1,
    b2.field_value AS fv2
FROM A a
LEFT JOIN B b1
    ON a.id = b1.A_ID AND b1.field_name = 'first'
LEFT JOIN B b2
    ON a.id = b2.A_ID AND b2.field_name = 'last';

这个答案假设来自给定 A 记录的左连接最多只能匹配 B table 中的一条记录,但是,无论如何,这对于您的相关子查询来说是仅匹配 [=15] 的要求=] 单个值。