我只是认为答案是错误的,因为外键没有uniqueness属性.

但有些人说,如果自己加入谈判桌,也可以这样做.

Employee table
| e_id | e_name  | e_sala  |  d_id  |
|----  |-------  |-----    |--------|
|  1   |   Tom   |  50K    |    A   |
|  2   | Billy   |  15K    |    A   |
|  3   | Bucky   |  15K    |    B   |


department table
| d_id | d_name  |
|----  |-------  |
|  A   |   XXX   | 
|  B   |   YYY   | 

现在,d_id是外键,所以它可以是主键.然后解释一下关于join的事情.它有什么用?

推荐答案

我觉得这个问题有点让人困惑.

如果您的意思是"外键是否可以"引用"同一表中的主键?",正如一些人回答的那样,答案是肯定的.例如,在employee表中,员工的一行可能有一列用于存储经理的员工编号,而经理也是一名员工,因此表中的一行与任何其他员工的行一样.

如果您的意思是"在同一个表中,列(或列集)可以既是主键又是外键吗?",在我看来,答案是否定的;这似乎毫无意义.但是,以下定义在SQL Server中成功了!

create table t1(c1 int not null primary key foreign key references t1(c1))

但我认为,除非有人拿出一个实际的例子,否则这种限制是没有意义的.

AmanS,在您的示例中,d_id在任何情况下都不能是Employee表中的主键.一个表只能有一个主键.我希望这能消除你的疑虑.d_id只能是部门表中的主键.

Sql相关问答推荐

比较表中的一些值

判断前几行以查看值是否存在

MariaDB 中 CAST() 和 COALESCE() 的顺序很重要

使用 SQL Server 将列转换为多行

Bigquery SQL Multiple Count group-by 在单个查询中

如何计算 PostgreSQL 中条件的出现次数?

这个 Oracle SQL SELECT 不应该工作.为什么会这样?

如何找出具有多个条件的相同值并将同一列的值放在不同的列中?

选择按列排序的唯一索引的最后一行

根据其他表中的数据更新和更新数据

合并具有相同 ID 的数据

搜索数据库中包含特定列的所有表

如何在snowflake中使sql在show命令中计算字符@

PostgreSQL条件选择抛出错误

如何删除没有唯一标识符的重复行

PostgreSQL 中的单引号和双引号有什么区别?

Sequelize ORM中连接表的条件

如何在 postgresql 中按周分组

使用 Python 连接到 Microsoft SQL 服务器

使用 ActiveRecord 进行 GROUP BY 和 COUNT