我有下表:
ID Number Revision
x y 0
x y 1
z w 0
a w 0
a w 1
b m 0
b m 0
我需要返回相同Number的行,然后是一个具有相同Revision.Number的ID可以是“Null”并且我不需要这些值。 输出应为:
z w 0
a w 0
我尝试了以下查询:
SELECT a.id,a.number,a.revision,
FROM table a INNER JOIN
(SELECT id, number, revision FROM table where number > '0'
GROUP BY number HAVING COUNT(*) > 1
) b ON a.revision = b.revision AND a.id != b.id
一点点补充 - 我的表格中有相同的编号,ID和修订版 - 我不需要在查询中显示这些行!
不行!请帮我弄清楚如何解决它。 感谢。
答案 0 :(得分:0)
Select t.Id,s.number,t.revision
from (Select number,count(*) 'c'
from table t1
where revision=0
group by number
having count(*) > 1
) s join table t on t.number= s.number
where revision = 0
答案 1 :(得分:0)
您的查询并不是那么遥远:
SELECT a.id,a.number,a.revision
FROM table a
JOIN (
-- multiple id for the same number and revision
SELECT number, revision
FROM table
GROUP BY number, revision
HAVING COUNT(*) > 1
) b
ON a.revision = b.revision
AND a.number = b.number
未经测试,但你应该明白这一点。如果您的sql-server是重发版本,您也可以使用OLAP函数解决此问题。
要过滤掉整行复制的行,我们只能通过分组选择唯一的行并具有:
SELECT a.id,a.number,a.revision
FROM table a
JOIN (
-- multiple id for the same number and revision
SELECT number, revision
FROM table
GROUP BY number, revision
HAVING COUNT(*) > 1
) b
ON a.revision = b.revision
AND a.number = b.number
GROUP BY a.id,a.number,a.revision
HAVING COUNT(1) = 1
答案 2 :(得分:0)
另一种简单方法:
SELECT DISTINCT b.id, b.Number, b.Revision
FROM tbl a
INNER JOIN tbl b
ON a.ID != b.ID AND a.Number = b.Number AND a.Revision = b.Revision;
这是在MySql 5中测试的,语法可能略有不同。