sql - 在 from/join 子句中使用和/或选择查询
问题描述
假设我有这样的 SQL Select 查询:
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
有没有办法在 JOIN 子句中使用 AND/OR?像这样的东西:
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers ON (
Orders.CustomerID = Customers.CustomerID
AND
Orders.CustomerName = Customers.CustomerName
)
我什至不确定这是否有意义——但如果这是可能的,如果有人知道这种查询的名称,请告诉我。
解决方案
是的,您可以在子句中放置任何布尔表达式on
,甚至是对子查询的引用。所以这是有效的:
SELECT o.OrderID, c.CustomerName, o.OrderDate
FROM Orders o INNER JOIN
Customers c
ON o.CustomerID = c.CustomerID AND
o.CustomerName = c.CustomerName;
也就是说,您的数据模型有问题。您不应该将客户名称存储两次——在Orders
表和Customers
表中。它应该在Customers
表中。而且,您可以使用CustomerId
.
所以,我建议修复你的数据模型,这样你就不需要为此使用两个键JOIN
。
推荐阅读
- android - 如何仅在打开特定活动时获取位置消息?
- javascript - 我如何知道自从上次在 React Native 中关闭智能手机以来已经开启了多长时间?
- javascript - 使用带有递归的reduce函数从多级树生成一个扁平的id数组?
- linkedin - 如何恢复组织权利?
- python - python np.nan 和 '==' & 'is'
- swift - SceneKit 粒子系统未出现
- acumos - 未收到新 Acumos 用户注册时的验证电子邮件
- ruby-on-rails - 无法在 Internet Explorer 中打开从 Rails 应用程序下载的文件
- excel - 用powershell调用excel宏
- javascript - 如何通过 iziModal 在多个画廊中使用 iFrame?