此查询成功地为表籍taxi_lines中的行提取了一对ID,其中一个驱动程序出现了多个打开的分配(例如,同时在2个出租车中)。
我的问题是它在两个命令中拉出每对id(例如500和509,然后是509和500)。
我尝试添加DISTINCT(CONCAT(tl1.id,tl2.id)),
和GROUP BY id1, id2
,但这些并没有实现唯一配对。
以下是获取上述数据的工作查询。如何改进以获得独特的对?
SELECT tl1.id AS id1, tl2.id AS id2
FROM taxi_lines tl1
JOIN taxi_lines tl2 ON tl1.driver = tl2.driver
AND tl1.id != tl2.id
AND tl1.driver > 0
WHERE tl1.end = '0000-00-00 00:00:00'
AND tl2.end = '0000-00-00 00:00:00'
答案 0 :(得分:2)
将AND tl1.id != tl2.id
替换为AND tl1.id > tl2.id
答案 1 :(得分:1)
尝试一些简单的事情:
AND t11.id > tl2.id
这将只返回第一个id大于第二个id的行。它会消除你一半的行。
答案 2 :(得分:0)
这有什么影响
SELECT distinct
case when tl1.id < tl2.id then tl1.id else tl2.id end as id1,
case when tl1.id < tl2.id then tl2.id else tl1.id end as id2
FROM taxi_lines tl1
JOIN taxi_lines tl2 ON tl1.driver = tl2.driver
AND tl1.id != tl2.id
AND tl1.driver > 0
WHERE tl1.end = '0000-00-00 00:00:00'
AND tl2.end = '0000-00-00 00:00:00'