这是我的疑问:
SELECT n.title, n.language, n.nid, nr.hash
FROM `node` n
LEFT JOIN `node_revision` nr ON (nr.title = n.title)
group by n.title having count(*) > 1
order by n.title, n.language, n.nid ASC
我正在尝试按节点表中的标题,语言和nid排序。
但是,我只想要至少存在2个或更多的标题。
这个查询看起来应该这样做,但我只是得到了独特的结果,这不是我想要的。
如何对所有这些列进行排序,而只获取多个行中存在完全相同标题的标题?
重复的标题位于节点表中。
答案 0 :(得分:0)
SELECT n.title, n.language, n.nid, nr.hash
FROM node n
LEFT JOIN node_revision nr ON (nr.title = n.title)
and n.title in
(SELECT n.title FROM node n group by n.title having count(*) > 1)
order by n.title, n.language, n.nid ASC;
答案 1 :(得分:0)
假设重复是由node_revision
表:
SELECT n.title, n.language, n.nid, nr.hash
FROM `node` n join
`node_revision` nr
ON nr.title = n.title join
(select nr.title, count(*) as cnt
from node_revision nr
group by nr.title
) nrcnt
on nrcnt.title = n.title and cnt > 1
order by n.title, n.language, n.nid ASC;
我还将join
切换为内连接。使用外连接查找重复项似乎很奇怪,但如果重复项可能位于任何一个表中,则可能是合理的。
如果重复项可以在任何一个表中,那么您只需要在子查询中进行连接:
SELECT n.title, n.language, n.nid, nr.hash
FROM `node` n left join
`node_revision` nr
ON nr.title = n.title left join
(select nr.title, count(*) as cnt
from node n left join
node_revision nr
on n.title = tr.title
group by nr.title
) nrcnt
on nrcnt.title = n.title and cnt > 1
order by n.title, n.language, n.nid ASC;