首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >结合两个不同列的Select语句

结合两个不同列的Select语句
EN

Stack Overflow用户
提问于 2015-10-24 00:00:48
回答 1查看 55关注 0票数 0

我的问题:-

写一个SELECT语句,返回他们在销售中购买的客户和产品的列表(折扣)。结果集必须包括LastName、FirstName、OrderDate、ProductName、ItemPrice、DiscountAmount和表的数量使用别名。通过LastName、OrderDate和ProductName对最终结果集进行排序。

我的ERD:-ERD

我的答案是:-

选择LastName,FirstName,OrderDate,ProductName,ItemPrice,DiscountAmount,Quantity

代码语言:javascript
运行
复制
    FROM Customers, Orders, OrderItems, Products
    WHERE 
    Customers.CustomerID = Orders.CustomerID
    AND
    Orders.OrderID = OrderItems. OrderID
    AND
    OrderItems.ProductID = Products.ProductID
    AND DiscountAmount > 0
    ORDER BY LastName, OrderDate, ProductName

它运行得很完美,well..but,我只是想知道是否有更好的方法来做它?有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-24 00:08:41

一个可能的改进是使用显式联接,而不是1992年被废弃的隐式联接语法,还可以使用表别名来提高查询的可读性:

代码语言:javascript
运行
复制
SELECT 
  c.LastName, 
  c.FirstName, 
  o.OrderDate, 
  p.ProductName, 
  oi.ItemPrice, 
  oi.DiscountAmount, 
  oi.Quantity
FROM 
  Customers c
INNER JOIN 
  Orders o ON c.CustomerID = o.CustomerID
INNER JOIN 
  OrderItems oi ON o.OrderID = oi.OrderID
INNER JOIN 
  Products p ON oi.ProductID = p.ProductID
WHERE 
  oi.DiscountAmount > 0
ORDER BY 
  c.LastName, 
  o.OrderDate, 
  p.ProductName;

请注意,这些更改不会影响查询的性能或结果。

它可能是,你也应该使用聚合函数,并总结折扣金额和/或计数的数量-问题不是那么清楚。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33313088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档