当我们在mySQL中使用UNION时,如何在不同的列上获取查询结果?

时间:2014-08-13 20:52:36

标签: mysql sql

我正在尝试以该格式显示MySQL查询结果

Title 1 Title 2 Title3

使用此查询:

SELECT title as titre1 FROM sequence WHERE ID_sequence = 1 UNION SELECT title as titre2 from sequence WHERE ID_sequence = 2 UNION SELECT title as titre3 FROM sequence WHERE ID_sequence = 3

但结果显示在此表单

标题1 与不同的ROWS(标题1,2和3)。

任何有助于感谢的想法!

2 个答案:

答案 0 :(得分:0)

UNION数据会将各种数据集合并到一个公共列结构中,每个列都有一行。

在这种情况下,您要查找的是每个序列的子查询,以列的形式返回。这应该可以解决问题。请注意,如果您的子查询返回多行,那么您将收到错误,但这不应该是您的查询中的问题,因为您正在过滤单个ID(假设序列表的主键中的ID_sequence)

SELECT 
  (SELECT title as titre1 FROM sequence  WHERE ID_sequence = 1 ) AS titre1 
, (SELECT title as titre2 from sequence  WHERE ID_sequence = 2) AS titre2
, (SELECT title as titre3 FROM sequence  WHERE ID_sequence = 3) AS titre3

答案 1 :(得分:0)

UNION始终将添加到查询中 - 在UNION的两个查询中,第二个查询的结果将显示在第一个结果的下方。所以UNION不会在这里做你想做的事。

此查询:

SELECT
  CASE ID_sequence WHEN 1 THEN title ELSE NULL END CASE as titre1,
  CASE ID_sequence WHEN 2 THEN title ELSE NULL END CASE as titre2,
  CASE ID_sequence WHEN 3 THEN title ELSE NULL END CASE as titre3
FROM sequence
WHERE ID_sequence > 0 AND ID_sequence < 3 ;

会给你三列。但是,在任何给定的行中,其中两列将为空白,这可能是您想要的,也可能不是。

如果您希望所有三列都包含每行中的值,那么您需要指定它们之间的某种关系(即Title1与哪个Title2等),然后使用自我加入。你还没有说过这种关系应该是什么,所以我不能举一个例子。