gpt4 book ai didi

sql - 连接多个表 - Oracle

转载 作者:行者123 更新时间:2023-12-01 22:58:49 25 4
gpt4 key购买 nike

我本周正在研究多个表连接,并返回了一些奇怪的结果。这是场景...

使用正确的表,使用传统连接操作创建查询,该查询将列出所有客户的姓名、书名和订单日期(格式为 MM/DD/YYYY,别名为“Order Date”)购买了“PRINTING IS US”出版的书籍的人。

对于我查询的数据库,此查询的正确表是 BOOK_CUSTOMER、BOOKS、BOOK_ORDER 和 PUBLISHER。我写的语句返回了我需要的信息,但它返回了将近 5900 条记录。我不明白这怎么可能是对的。出版商“Printing is Us”在数据库中只列出了 14 本书,并且只有 20 条客户记录,因此即使每个客户购买了每本“Printing is Us”的书,总共也只会返回 280 条记录。然而我无法弄清楚我有什么错。我的声明如下。

SELECT bc.firstname, bc.lastname, b.title, TO_CHAR(bo.orderdate, 'MM/DD/YYYY') "Order Date", p.publishername
FROM book_customer bc, books b, book_order bo, publisher p
WHERE(publishername = 'PRINTING IS US');

有人对我在这里想念的东西有任何想法吗?

谢谢。

最佳答案

我建议您现在就养成使用 ANSI 样式连接的习惯,这意味着您应该使用 INNER JOIN , LEFT OUTER JOIN , RIGHT OUTER JOIN , FULL OUTER JOIN , 和 CROSS JOIN SQL 语句中的元素,而不是使用“旧式”连接,其中所有表都在 FROM 中一起命名。子句和所有连接条件都放在 WHERE 中条款。与“旧式”连接相比,ANSI 样式的连接更容易理解,并且不太可能被误写和/或误解。

我将您的查询重写为:

SELECT bc.firstname,
bc.lastname,
b.title,
TO_CHAR(bo.orderdate, 'MM/DD/YYYY') "Order Date",
p.publishername
FROM BOOK_CUSTOMER bc
INNER JOIN books b
ON b.BOOK_ID = bc.BOOK_ID
INNER JOIN book_order bo
ON bo.BOOK_ID = b.BOOK_ID
INNER JOIN publisher p
ON p.PUBLISHER_ID = b.PUBLISHER_ID
WHERE p.publishername = 'PRINTING IS US';

分享和享受。

关于sql - 连接多个表 - Oracle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24100408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com