Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在SQL中缩写与不缩写_Mysql_Sql_Sql Server_Select - Fatal编程技术网

Mysql 在SQL中缩写与不缩写

Mysql 在SQL中缩写与不缩写,mysql,sql,sql-server,select,Mysql,Sql,Sql Server,Select,我第一次参加SQL课程,在使用leebooks.SQL文件编写查询时遇到问题。我遇到了一个解决方案,但我很好奇,因为我找到的解决方案将所有表和列都缩写了。当我试图按照我的教授的偏好重写没有缩写的查询时,我得到一个错误,即表不存在。我认为我重写的正确,带缩写的查询很好。如果需要,我不知道在哪里上传SQL文件?以下是查询: 使用缩写: SELECT b.Title, bo.OrderDate,bo.OrderID FROM BOOKS b LEFT OUTER JOIN ORDER_ITEMS oi

我第一次参加SQL课程,在使用
leebooks.SQL
文件编写查询时遇到问题。我遇到了一个解决方案,但我很好奇,因为我找到的解决方案将所有表和列都缩写了。当我试图按照我的教授的偏好重写没有缩写的查询时,我得到一个错误,即表不存在。我认为我重写的正确,带缩写的查询很好。如果需要,我不知道在哪里上传SQL文件?以下是查询:

使用缩写:

SELECT b.Title, bo.OrderDate,bo.OrderID
FROM BOOKS b
LEFT OUTER JOIN ORDER_ITEMS oi 
  ON b.BookID = oi.BookID
LEFT OUTER JOIN BOOK_ORDER bo 
  ON oi.OrderID = bo.OrderID
ORDER BY oi.BOOKID DESC;
无缩写:

SELECT BOOKS.Title, BOOK_ORDER.OrderDate, BOOK_ORDER.OrderID 
FROM BOOKS 
LEFT OUTER JOIN ORDER_ITEMS.OrderID 
  ON BOOKS.BookID = ORDER_ITEMS.BookID 
LEFT OUTER JOIN BOOK_ORDER 
  ON ORDER_ITEMS.OrderID = BOOK_ORDER.OrderID 
ORDER BY ORDER_ITEMS.BookID DESC;

我不明白为什么第二个不起作用,而第一个,如果他们基本上是一样的东西。我缺少什么?

联接应该在表上执行,而不是在列上执行。您的子句
左外部联接顺序\u项。OrderID
应为
左外部联接顺序\u项
。不带表别名的完整查询:

SELECT BOOKS.Title, BOOK_ORDER.OrderDate, BOOK_ORDER.OrderID
FROM BOOKS 
LEFT OUTER JOIN ORDER_ITEMS ON BOOKS.BookID = ORDER_ITEMS.BookID 
LEFT OUTER JOIN BOOK_ORDER ON ORDER_ITEMS.OrderID = BOOK_ORDER.OrderID 
ORDER BY ORDER_ITEMS.BookID DESC;

“别名”,无论是
'table'作为tableAlias
还是column(
table.column
作为
columnAlias
)都是文本替换

SELECT `books`.title, 
       `book_order`.orderdate, 
       `book_order`.orderid 
FROM   `books` 
       LEFT OUTER JOIN `order_items` 
                    ON `books`.bookid = `order_items`.bookid 
       LEFT OUTER JOIN `book_order` 
                    ON `order_items`.orderid = `book_order`.orderid 
ORDER  BY `order_items`.bookid DESC; 
将表名(
ORDER\u ITEMS
)替换为列名(
ORDER\u ITEMS.OrderID
)。i、 e
JOIN ORDER\u ITEMS.OrderID
代替:JOIN
ORDER\u ITEMS

你有什么,用“别名”和我添加了“AS”关键字,试图让它清楚

SELECT `b`.title, 
       `bo`.orderdate, 
       `bo`.orderid 
FROM   books AS `b`
       LEFT OUTER JOIN order_items AS `oi` 
                    ON `b`.bookid = `oi`.bookid 
       LEFT OUTER JOIN book_order  AS `bo` 
                    ON `oi`.orderid = `bo`.orderid 
ORDER  BY `oi`.bookid DESC; 
这是有效的SQL。我使用了“AS”和backtick来突出显示“alias”

表别名列表:

  • b
    =>
    书籍
  • oi
    =>
    订购商品
  • bo
    =>
    图书订单
因此,将所有
表别名
替换为
表名
。在这里,我在表名周围使用反勾号来表示替换

SELECT `books`.title, 
       `book_order`.orderdate, 
       `book_order`.orderid 
FROM   `books` 
       LEFT OUTER JOIN `order_items` 
                    ON `books`.bookid = `order_items`.bookid 
       LEFT OUTER JOIN `book_order` 
                    ON `order_items`.orderid = `book_order`.orderid 
ORDER  BY `order_items`.bookid DESC; 

它是表名或列名的文本替换

你有“LEFT OUTER JOIN ORDER\u ITEMS.OrderID”你应该有“LEFT OUTER JOIN ORDER\u ITEMS”哇,真不敢相信我居然没看到。我猜我的眼睛不习惯这么长时间都是这样开始的。非常感谢。非常感谢。我不确定是否有特定的规则来进行缩写,这是有道理的。谢谢因此,对于这一个:选择BC.FirstName | |',“| | BC.LastName作为“客户名称”,BO.OrderID来自BOOK_Customer BC NATURAL JOIN BOOK_ORDER BO,其中BO.ShipDate不是CustomerID ASC的空订单;如果没有缩写,则选择BOOK_CUSTOMER.FirstName | | |',“| | BOOK_CUSTOMER.LastName”作为“客户名称”,BOOK_CUSTOMER中的BOOK_ORDER.OrderID自然加入BOOK_ORDER,其中BOOK_ORDER.ShipDate不是客户ID ASC的空订单;同样值得一提的是,一旦设置了别名,就不能再使用“Table.Column”,需要使用“alias.Column”。或者只要没有歧义,[专栏]在这两种情况下都有效。我想,这确实有效。谢谢你的帮助。