SELECT引用外键的主键

问题描述 投票:-1回答:3

如何编写将主键与外键进行比较的查询,以查看它们是否引用相同的记录?我在想类似的东西:

[SELECT BookID from books WHERE BookID = Publisher,但是显然它们不起作用,因为它们是不同的数字。

示例:

CREATE TABLE IF NOT EXISTS `books` (
  `BookID` int(9) NOT NULL AUTO_INCREMENT,
  `Title` varchar(1000) NOT NULL,
  `Pages` int(10) NOT NULL,
  `Description` TEXT NOT NULL,
  `Publisher` varchar(1000) NOT NULL,,
  PRIMARY KEY (`BookID`),
  FOREIGN KEY (`Publisher`) REFERENCES `publisher_id`(`ID`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
mysql sql
3个回答
1
投票

您需要在书的表中添加出版商的唯一ID或名称(无论出版者表中的主键是什么)列作为外键。在大多数情况下,图书只有一位出版商。出版商可以出版多本书。


0
投票

根据我的理解可能是这样:

SELECT BookID 
From Books
WHERE BookId.Book = Publisher_Id.Publisher 

0
投票
FOREIGN KEY (`Publisher`) REFERENCES `publisher_id`(`ID`) ON DELETE CASCADE

您的代码中的这一行表示该数据库中还有一个名为Publisher_id的表,其中有一个名为ID的列。正确吗?

在正常情况下,您为表命名,例如:Publisher。令ID为Publisher表的主键列。它可以包含更多列,例如名称,地址等。

[假设一本书有一位出版商,而一位出版商可以出版多本书,在books表中有一列称为publisher_id。然后,您可以按如下所示将其引用为外键(就像在上面所做的一样,将其放在create语句中)。

FOREIGN KEY (`publisher_id`) REFERENCES `Publisher`(`ID`) ON DELETE CASCADE

如果您有出版商ID(例如:5),并且想要获取该出版商发行的所有书籍ID,则可以运行以下查询。

SELECT Books.BookID FROM Books WHERE Books.publisher_id = 5;

table_namecolumn_name是MySQL的语法。

© www.soinside.com 2019 - 2024. All rights reserved.