如何 SQL 使用 "for any two rows" 语句查询 table

How to SQL query a table using a "for any two rows" statement

我可以创建一个执行以下操作的 SQL 查询吗:对于 table T 中的任意两个不同的行,r1 和 r2,令 r1.ID = X 和 r2。 ID = Y。select ID 对 (X,Y) 如果 X + Y = 5.

我想使用 W3 School example

中的以下查询
SELECT CustomerID AS X, CustomerID AS Y FROM Customers WHERE X+Y=5;

但这似乎不满足"For any two distinct rows in table T"条件。

感谢任何帮助。

在适当的条件下使用 JOIN

SELECT DISTINCT
CASE WHEN c1.ID > c2.ID THEN c2.ID ELSE c1.ID END AS CustomerID1, 
CASE WHEN c1.ID > c2.ID THEN c1.ID ELSE c2.ID END AS CustomerID2 
FROM Customers c1
JOIN Customers c2 ON c1.ID <> c2.ID AND c1.SomeValue + c2.SomeValue = 5

你应该使用 DISTINCT 子句,因为否则你会得到重复的。 假设您 table 有行:

ID   Value
1    2
2    3

没有 case 表达式你会得到:

CustomerID1 CustomerID2
1           2
2           1

使用 case 表达式你得到:

CustomerID1 CustomerID2
1           2
1           2

这就是您需要应用 DISTINCT 子句的原因。

我建议使用 join:

select c1.id, c2.id
from Customers c1 join
     Customers c2
     on c1.id + c2.id = 5 and c1.id < c2.id;

请注意,由于 <,这满足 "distinct" 规则。不能同时为 c1c2 选择特定行。