我的两个表设置如下:
表格1
+------+---------+--------------------------------------+ | id | tail | content | +------+---------+--------------------------------------+ | 1 | abc | ... | | 2 | def | ... | | 3 | ghi | ... | | 4 | def | ... | | 5 | jkl | ... | +------+-------+----------------------------------------+
表2
+------+--------+---------------------------------------+ | id | tailID | value | others | +------+--------+---------------------------------------+ | 1 | 2 | 412 | | | 2 | 3 | 215 | | | 1 | 2 | 571 | | | 1 | 4 | 123 | | +------+--------+---------------------------------------+
我喜欢将这两个表中的所有列连接到匹配的tail = tailID,但不是具有相同尾部的重复行.
对于重复的TAIL,只需要获得相同尾部的最大VALUE的单行.
我目前正在使用
SELECT table1.tail, table2.other_column FROM table1 INNER JOIN table2 on table1.id = table2.tailID WHERE table1.some_coloum = "a sepecific string" ORDER BY table2.value
但它会返回许多相同尾部的副本.
我只需要对于具有高位值tableuE 2的重复TAIL有单行.
解决方法:
disTINCT与交叉申请:
SELECT disTINCT t1.tail,
t2.other_column,
t3.[value]
FROM table1 t1
CROSS APPLY (
SELECT tailid,
MAX([value]) as [value]
FROM table2
WHERE tailid = t1.id
GROUP BY tailid
) as t3
INNER JOIN table2 t2
ON t2.tailid = t3.tailid AND t3.[value] = t2.[value]
WHERE t1.some_coloum = "a sepecific string"