mysql distinct查询不起作用

时间:2013-08-12 04:14:55

标签: mysql sql drupal

我有Drupal 6的这个mysql查询。但是它并没有返回不同的nid,因为它的意思是。有人可以帮助识别我的代码中的错误吗?

    SELECT DISTINCT( n.nid), pg.group_nid, n.title, n.type, n.created, u.uid, u.name, tn.tid     FROM node n 
INNER JOIN users u on u.uid = n.uid 
LEFT JOIN og_primary_group pg ON pg.nid=n.nid 
LEFT JOIN term_node tn ON tn.vid=n.vid 
WHERE n.nid IN ( 
      SELECT DISTINCT (node.nid) 
      FROM node node 
      INNER JOIN og_ancestry og_ancestry ON node.nid=og_ancestry.nid 
      WHERE og_ancestry.group_nid = 134 ) 
        AND n.status<>0 
        AND n.type NOT IN ('issue') 
        AND tn.tid IN (
             SELECT tid FROM term_data WHERE vid=199 AND ( LOWER(name)=LOWER('Announcement') OR LOWER(name)=LOWER('Report') OR LOWER(name)=LOWER('Newsletter') 
     )) ORDER BY n.created DESC

我可以获得不同的nid的唯一方法是添加一个groupby子句,但这会破坏我的Drupal寻呼机查询。

3 个答案:

答案 0 :(得分:1)

从查询的第一行删除“Distinct”,因为已经在where子句中有不同的id。然后它应该工作。

答案 1 :(得分:1)

DISTINCT用于返回所选的DISTINCT行,因此不是单个列作为select子句的一部分,而是返回ENTIRE select子句。

SELECT Syntax

  

ALL和DISTINCT选项指定是否应该有重复的行   回。 ALL(默认值)指定所有匹配的行应该是   返回,包括重复。 DISTINCT指定删除   结果集中的重复行。指定两者都是错误的   选项。 DISTINCTROW是DISTINCT的同义词。

答案 2 :(得分:0)

在Mysql中,带有distinct的结果由所有选定的列确定,而不是由一个有区别的列确定,也许你应该编写另一个查询以获得不同的nid。