2014-03-05 134 views
-1

我有表的结构如下:SQL命令,主键和外键

表人:

+-------+--------+ 
| sno | sname | 
+-------+--------+ 
| 1 | Bhanu | 
| 2 | Raghu | 
| 3 | Bunny | 
| 4 | Shyam | 
+-------+--------+ 

表的朋友:

+------+---------+ 
| sno | Friend | 
+------+---------+ 
| 1 | 2  | 
| 2 | 1  | 
| 3 | 4  | 
| 4 | 3  | 
+------+---------+ 
  • Bhanu是Raghu的朋友,反之亦然。
  • 兔子是Shyam的朋友,反之亦然。

如果我从人表中给出'Bhanu'的名字,我应该也可以得到他的朋友的名字。在朋友表中提到了他在人表中的sno值。

请帮助我用这种数据库执行此读取操作。

+0

你的意思是SQL查询? – Kedarnath

+0

是@Kedarnath,我正在用Ajax和Java技术做Web应用程序,需要SQL命令,如果有钥匙,我可以向前移动。请做好我的解决方案。谢谢。 –

+0

好,但为什么你用JAVA和Android标记了这个问题?你应该用sql,mysql标签标记 – Kedarnath

回答

0

您需要两次访问person表,因此需要别名。我建议这个表格结构首先:

person (id, name) 

friend (from_person_id, to_person_id) 

这和你的表格结构非常相似,但名称更清晰一些。

现在你可以有这样的:

SELECT 
    p2.name 
FROM 
    friend 
INNER JOIN person p1 ON (p1.id = friend.from_person_id) 
INNER JOIN person p2 ON (p2.id = friend.to_person_id) 
WHERE 
    p1.name = 'Bhanu' 
; 

,列出了所有的友谊从正在进行的“从”到“”。您可能还需要列出所有以其他方式进行的友谊,在这种情况下,您可以添加OR p2.name = 'Bhanu'