这是一项家庭作业。我没有复制粘贴下面的问题,我做了一个更简单的版本,专注于我被卡住的特定区域。
假设我有一张两个值的表:一个人的名字,以及他昨天共进午餐的地方。假设每个人都成对吃午饭。如何查询数据库以返回昨天共进午餐的所有人?每对必须只列出一次。
我实际上甚至不确定教授的意思是将他们作为成对回归。我给他发了一封电子邮件,但还没有回复。看起来他希望我写一个查询,返回一个表,其中第1列为第1列,第2列为第2列。
有关如何解决这个问题的任何建议?假设他希望将它们作为单独的列似乎是正确的吗?
到目前为止,我基本上已经:
SELECT name, restaurant FROM lunches GROUP BY restaurant, name
基本上只是重组桌子,以便一起吃午饭的人一个接一个。
答案 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的默认值,您可以将其更改为您想要的任何内容)。
另请注意,对于第一个查询,成对的名称将按字母顺序排列,因为我们使用<
而不是<>
来避免每次列出两次。