尝试按多列排序,只需要具有多个值的列的值

时间:2014-05-20 22:43:37

标签: mysql sql

这是我的疑问:

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个或更多的标题。

这个查询看起来应该这样做,但我只是得到了独特的结果,这不是我想要的。

如何对所有这些列进行排序,而只获取多个行中存在完全相同标题的标题?

重复的标题位于节点表中。

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;