1

我有查询 LEFT 连接来自两个表的信息。使用具有以下连接的代码

LEFT JOIN A on source = news_id 
LEFT JOIN B on source = other_news_id

如何连接或显示来自两列的数据,以便生成一列信息。

ID  source    Left Join on ID a   Left Join on ID b   
a    1            info1             <null>
a    2            info2             <null>
b    3            <null>            info3
b    4            <null>            info4

类似的东西

ID  source   info
a    1       info1             
a    2       info2
b    3       info3             
b    4       info4

如何将所有左连接放在一列中?

4

4 回答 4

4

COALESCE()如果始终只有一个值,则可以使用。它返回第一个非空参数。

SELECT ID, source, COALESCE(infoa, infob) AS info FROM ...
于 2013-01-07T20:37:52.097 回答
2

COALESCE函数将执行此操作。

有关如何使用此函数的示例,请参阅MySQL 文档。

于 2013-01-07T20:37:42.657 回答
2

从样本数据来看,似乎 noA.news_id永远不等于 aB.other_news_id并且您希望两列COALESCE至少有一个NULL值。

我也猜你的FROM条款是这样的:

FROM  T
  LEFT JOIN A on T.source = A.news_id 
  LEFT JOIN B on T.source = B.other_news_id

如果是这种情况,您还可以使用以下命令重写查询UNION

SELECT ID, source, infoa AS info
FROM  T
  JOIN A on T.source = A.news_id 
WHERE ...

UNION ALL

SELECT ID, source, infob
FROM  T
  JOIN B on T.source = B.other_news_id
WHERE ...
于 2013-01-07T20:47:50.930 回答
0

如果我理解正确,您需要使用 INNER JOINs 而不是 LEFT JOINs

于 2013-01-07T20:37:38.717 回答