单个查询多个 selects - 即使一个 select returns 为空

Single query for several selects -even if one select returns empty

我需要创建多个 select 语句来获取简单数据(只有一行 包含 一个或多个字段每个 select).

简化示例:

select name, price from article where id=125
select log, email from user where uid=241

我只想处理来自 php 端 的一条语句(或者:我不想准备多条语句、执行多条语句、捕获和处理异常每次执行并最终获取每个语句的结果...)。
我试过了:

select * from (
  (select name, price from article where id=125) as a,
  (select log, email from user where uid=241) as b
)

如果每个子select returns 值:

,效果很好
name  |  price  | log  | email
------------------------------------------
dummy |  12,04  | john | john@example.com

但是如果其中一个子selectreturns为空,整个selectreturns为空.
我想要的是:空结果 subselects.
的空值 我用 ifnull()coalesce() 尝试了很多事情,但无法得到等待的结果(我知道如何将它们与空值一起使用,但我没有找到处理它们的方法空结果集的情况)。
我终于找到了左连接的解决方案:

select * from (
  (select 1) as thisWillNeverReturnEmpty
  left join (select name, price from article where id=125) as a on 1
  left join (select log, email from user where uid=241) as b on 1
)

即使其中一个子查询 returns 为空(甚至两个都为空,因此 "select 1")也能完美运行。
我在 SO 上发现的另一种方法是在每个子查询中添加一个 count(*) 以确保有一个值。

但这一切看起来都很脏,我不敢相信没有简单的方法只使用像 ifnull() 这样的东西。 正确的做法是什么?

我最终找到的最佳方法是:

select * from (
  (select count(*) as nbArt, name, price from article where id=125) as a,
  (select count(*) as nbUser, log, email from user where uid=241) as b
)

这样,子查询永远不会 returns 为空,这就解决了问题(始终至少有一个 "zero" 计数后跟空值)。

未找到文章时的示例结果:

nbArt  |  name  |  price  |  nbUser  |  log  |  email
----------------------------------------------------------------
  0    |  null  |   null  |    1     |  john | john@example.com