正确的 sql 查询以简化关系 (mysql)

乔斯

我有下表:

表A

id emp emp_dst
1   a    b
2   a    d
3   b    c
4   b    a
5   c    d
6   d    a
7   d    b
8   d    c

由于 a = b 等于 b = a,我的 sql 查询应返回以下简化表

表B

emp emp_dst
 a     b
 a     d
 b     c
 d     b
 d     c 

但我不知道如何在 MYSQL 的 sql 查询中执行此操作,

尝试用 UNION 修改表达式但结果是错误的

MatBailie

一个更适合我个人喜好的替代方案......

(根据您的评论,id结果中的 不相关。)

SELECT
  CASE WHEN emp <= emp_dst THEN emp     ELSE emp_dst END   AS emp,
  CASE WHEN emp <= emp_dst THEN emp_dst ELSE emp     END   AS emp_dst
FROM
  yourTable
GROUP BY
  1, 2
ORDER BY
  1, 2

如果你想要一个 id,那么你可以添加MIN(id). 请注意,id发现实际上可能具有相反的两个值。


使用 aLEFT JOIN而不是的替代方法GROUP BY

SELECT
  yourTable.*
FROM
  yourTable
LEFT JOIN
  yourTable   AS reflection
    ON  reflection.emp_dst = yourTable.emp
    AND reflection.emp     = yourTable.emp_dst
    AND reflection.id     <> yourTable.id
WHERE
      (reflection.id IS NULL)
  OR  (yourTable.emp <  reflection.emp_dst)
  OR  (yourTable.emp =  reflection.emp_dst AND yourTable.id < reflection.id)
ORDER BY
  yourTable.emp,
  yourTable.emp_dst

OR只有在表可以有 时才需要最后一个'a', 'a',并且它出现两次。)

注意:这可能受益于拥有两个索引...

CREATE INDEX yourTable_e_ed_id ON yourTable( emp, emp_dst, id );
CREATE INDEX yourTable_ed_e_id ON yourTable( emp_dst, emp, id );

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章