查询MySQL共享一个值的行,并将它们作为列返回?

时间:2012-02-01 07:09:05

标签: mysql

这是一项家庭作业。我没有复制粘贴下面的问题,我做了一个更简单的版本,专注于我被卡住的特定区域。

假设我有一张两个值的表:一个人的名字,以及他昨天共进午餐的地方。假设每个人都成对吃午饭。如何查询数据库以返回昨天共进午餐的所有人?每对必须只列出一次。

我实际上甚至不确定教授的意思是将他们作为成对回归。我给他发了一封电子邮件,但还没有回复。看起来他希望我写一个查询,返回一个表,其中第1列为第1列,第2列为第2列。

有关如何解决这个问题的任何建议?假设他希望将它们作为单独的列似乎是正确的吗?

到目前为止,我基本上已经:

SELECT name, restaurant FROM lunches GROUP BY restaurant, name

基本上只是重组桌子,以便一起吃午饭的人一个接一个。

1 个答案:

答案 0 :(得分:1)

我们必须假设在一家餐馆里只能吃一顿午餐。 您可以使用自联接获得对的列表:

SELECT l1.name, l2.name FROM lunches l1
JOIN lunches l2
ON l1.restaurant = l2.restaurant AND l1.name < l2.name

或使用GROUP BY:

SELECT GROUP_CONCAT(name) FROM lunches 
GROUP BY restaurant

第一个查询将在两个不同的列中返回对,而第二个在一列中,使用逗号作为分隔符(GROUP_CONCAT的默认值,您可以将其更改为您想要的任何内容)。 另请注意,对于第一个查询,成对的名称将按字母顺序排列,因为我们使用<而不是<>来避免每次列出两次。