如何编写将主键与外键进行比较的查询,以查看它们是否引用相同的记录?我在想类似的东西:
[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;
您需要在书的表中添加出版商的唯一ID或名称(无论出版者表中的主键是什么)列作为外键。在大多数情况下,图书只有一位出版商。出版商可以出版多本书。
根据我的理解可能是这样:
SELECT BookID
From Books
WHERE BookId.Book = Publisher_Id.Publisher
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_name。column_name是MySQL的语法。