首页 > 解决方案 > 在 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
)

我什至不确定这是否有意义——但如果这是可能的,如果有人知道这种查询的名称,请告诉我。

标签: sqlpostgresql

解决方案


是的,您可以在子句中放置任何布尔表达式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


推荐阅读