两个表的SQL命令,需要主键和外键

时间:2014-03-05 08:28:40

标签: mysql sql database

我的表格结构如下:

表人:

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

表朋友:

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

如果我从人员表中提供'Bhanu'的名字,我也应该能够得到他的朋友的名字。在Friend表中提到了人员表中的sno值。

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

1 个答案:

答案 0 :(得分: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'