如何 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" 规则。不能同时为 c1
和 c2
选择特定行。
我可以创建一个执行以下操作的 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" 规则。不能同时为 c1
和 c2
选择特定行。