假设您的原始SQL是:
SELECT from_loc, to_loc FROM route;
使用它两次作为与LEFT JOIN
连接在一起的子查询。之后,使用IF
明确选择所需的字段。
SELECT DISTINCT
IF (y.from_loc IS NULL, x.from_loc,
IF(x.from_loc < x.to_loc, x.from_loc, x.to_loc)) AS from_loc,
IF (y.from_loc IS NULL, x.to_loc,
IF(x.from_loc > x.to_loc, x.from_loc, x.to_loc)) AS to_loc
FROM (
) AS x
SELECT from_loc, to_loc FROM route
LEFT JOIN (
SELECT from_loc, to_loc FROM route
) AS y
ON x.from_loc = y.to_loc AND x.to_loc = y.from_loc;
对于演示中,我使用下面的SQL在你的问题,以创建示例数据:
SELECT "A" AS from_loc, "B" AS to_loc
UNION SELECT "B", "C"
UNION SELECT "B", "A";
试试这个在您的MySQL客户端应用程序:
SELECT DISTINCT
IF (y.from_loc IS NULL, x.from_loc,
IF(x.from_loc < x.to_loc, x.from_loc, x.to_loc)) AS from_loc,
IF (y.from_loc IS NULL, x.to_loc,
IF(x.from_loc > x.to_loc, x.from_loc, x.to_loc)) AS to_loc
FROM (
) AS x
SELECT "A" AS from_loc, "B" AS to_loc
UNION SELECT "B", "C"
UNION SELECT "B", "A"
LEFT JOIN (
SELECT "A" AS from_loc, "B" AS to_loc
UNION SELECT "B", "C"
UNION SELECT "B", "A"
) AS y
ON x.from_loc = y.to_loc AND x.to_loc = y.from_loc;
我知道这是不是一个有效的解决方案,但它只是起作用!
发布您当前的SQL查询 – Shai
嗨,谢谢,我的查询真的很大,我只是为了让它理解而放在这里非常简化的场景。谢谢! – user1143343