在和/或从/联接子句中选择查询

时间:2019-02-16 05:05:14

标签: sql postgresql

说我有这样的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
)

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

3 个答案:

答案 0 :(得分:1)

是的,您可以有多个加入条件。

以下查询有效

Select a.a1, b.b1 from table1 a inner join table2 b on a.a1=b.a1 and a.b1=b.b1;

您甚至还可以使用过滤器和功能。

Select a.a1, b.b1 from table1 a inner join table2 b on a.a1=b.a1 and a.b1=b.b1 and b.c1='someValue';

Select a.a1, b.b1 from table1 a inner join table2 b on a.a1=b.a1 and a.b1=b.b1 and <functions>

答案 1 :(得分:1)

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers ON 
Orders.CustomerID = Customers.CustomerID 
AND Orders.CustomerName = Customers.CustomerName

是的,可以在多个字段上加入。

答案 2 :(得分:1)

是的,您可以将任何布尔表达式放在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不需要使用两个键。