SQL Union或其他表连接

时间:2013-05-14 09:00:04

标签: mysql sql join union

我无法绕过SQL查询,试图找出一些东西。

很快,这是我的(简单)表格: 它是社交网站中添加的朋友的代表。 我必须使用这样的表格式,user1和user2都是主键。

          User1       |       User2
    --------------------------------------
      foo@a.com       |   things@stuff.com
      foo@a.com       |   lala@hi.com
      things@stuff.com|   lol@k.com
      lol@k.com       |   foo@a.com
      foo@a.com       |   lol@k.com

我需要做的是编写一个SELECT语句,该语句将返回与foo@a.com成为朋友的所有唯一用户。

SELECT User2
FROM members 
WHERE User1 = 'things@stuff.com'

将返回lol@k.com而不是foo@a.com,即使我需要它返回后者。

SELECT *
FROM members
WHERE User1 = 'foo@a.com'
OR User2 = 'foo@a.com'

我认为会返回错误吗?可能选择多列的东西。

所以我认为联盟加入或其他一些联接是必要的(联合所以没有重复?)但我真的不确定如何去做。

我正在尝试在PHP中实现这一点,所以即使我写的最后一个查询有效,我也不确定如何回复User1或User2,具体取决于它返回的内容/如果有意义的话我需要哪一个。

3 个答案:

答案 0 :(得分:2)

使用UNION(表现): -

SELECT User2
FROM members
WHERE User1 = 'foo@a.com'
UNION
SELECT User1
FROM members
WHERE User2 = 'foo@a.com'

答案 1 :(得分:1)

为列

使用alias名称
SELECT User2 AS friend
FROM members 
WHERE User1 = 'things@stuff.com'
UNION
SELECT User1 AS friend
FROM members 
WHERE User2 = 'things@stuff.com'

现在你可以回复friend

HTH

答案 2 :(得分:0)

这完全取决于您如何定义两个用户之间的关系。

例如,您有一个表项,其中User1 ='foo@a.com'和User2='mumu@f.com'。这是什么意思?这是否意味着用户foo成为mumu的朋友? “友谊”的方向是否重要?

如果答案是否定的,您只想获取用户为foo的所有行,那么您的查询

    SELECT *
FROM members
WHERE User1 = 'foo@a.com'
OR User2 = 'foo@a.com'

是对的。

但是,要获取数据,您需要浏览两列结果。