如何运行这个MySQL查询?

时间:2014-08-10 20:09:01

标签: mysql

我有一个朋友'表格,有两个属性:(friend1,friend2),代表朋友1和#39;之间的友谊。和朋友2'。例如,如果元组('John','Mike')在朋友中,则John是Mike的朋友,反之亦然(因此,元组('Mike','John')将不会出现在'中。朋友')
。 我正在寻找能够生成约翰所有朋友的SQL查询 (请注意,John可以出现在朋友1'或朋友2')下面。 所以起初我想到了以下几点:

SELECT *
FROM friends
WHERE friend1='John' OR friend2='John';

让我们标记为' John' s_friends',现在我可以拥有类似的内容:

SELECT friend1
FROM johns_friends
WHERE friends1<>'John'
UNION
SELECT friend2
FROM johns_friends
WHERE friends2<>'John';

不要紧,我不知道如何正确运行这个特定的查询(上面不会编译&#39;无论我怎么尝试别名),但我觉得在那里&#39更简单的方法,我可以真正使用一些帮助从朋友那里提取我需要的信息&#39;表。

编辑:
更清楚一点:我想要一个列表 - 一个clumn - 所有约翰的朋友。因此第二个问题。

4 个答案:

答案 0 :(得分:3)

尝试这样的事情

SELECT friend1 as johns_friends 
FROM friends 
WHERE friend2 = 'John'
UNION
SELECT friend2 as johns_friends 
FROM friends 
WHERE friend1 = 'John'
; 

答案 1 :(得分:3)

我认为这就是你要找的东西:

SELECT friend1
FROM friends
WHERE friend2 = 'John'
UNION
SELECT friend2
FROM friends
WHERE friend1 = 'John'
;

答案 2 :(得分:2)

使用一个查询:

SELECT friend1
FROM friends
WHERE friend2 = 'John'
UNION
SELECT friend2
FROM friends
WHERE friend1 = 'John';

答案 3 :(得分:1)

如果您想获得如下结果:

|FRIEND|
--------
|Mike  |
--------
|Jack  |
--------

你可以尝试

SELECT DISTINCT(`FRIEND`) AS `FRIEND` FROM (
    SELECT `friends1` AS `FRIEND` FROM `johns_friends` WHERE `friends1` <> 'John'
    UNION
    SELECT `friends2` AS `FRIEND` FROM `johns_friends` WHERE `friends2` <> 'John'
) AS `f`

SQL小提琴:http://sqlfiddle.com/#!2/30027/1