说我有这样的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
)
我什至不确定这是否有意义-但是,如果有可能,如果有人知道这种查询的名称,请告诉我。
答案 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
不需要使用两个键。