【问题标题】:mysql distinct query not workingmysql不同的查询不起作用
【发布时间】:2013-08-12 13:52:29
【问题描述】:

我有这个针对 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 寻呼机查询。

【问题讨论】:

  • DISTINCT 旨在返回选定的 DISTINCT 行,因此不是作为 select 子句的一部分的单个列,而是 ENTIRE select 子句。
  • 从主查询中删除不同应该按照@Raghu Chandra 的建议工作,因为您获得不同的ID,然后过滤记录。现在在这种情况下,如果 User 中有多个相同 nid 的记录,您最终可能会看到重复的 nid。
  • 感谢@astander 澄清 Distinct 只返回不同的行。我通过删除导致重复问题的 select 语句中的 tid 字段修改了我的查询。但是,我还是很疑惑,为什么还要在 select 语句中使用 DISTNCT(nid) 呢?
  • @astander 你能在这里添加你的评论作为答案吗?然后我可以接受它作为我问题的有效答案;)

标签: mysql sql drupal


【解决方案1】:

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

SELECT Syntax

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2012-12-07
        • 1970-01-01
        • 2017-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多