我有一个朋友'表格,有两个属性:(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 - 所有约翰的朋友。因此第二个问题。
答案 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`