我有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寻呼机查询。
答案 0 :(得分:1)
从查询的第一行删除“Distinct”,因为已经在where子句中有不同的id。然后它应该工作。
答案 1 :(得分:1)
DISTINCT用于返回所选的DISTINCT行,因此不是单个列作为select子句的一部分,而是返回ENTIRE select子句。
ALL和DISTINCT选项指定是否应该有重复的行 回。 ALL(默认值)指定所有匹配的行应该是 返回,包括重复。 DISTINCT指定删除 结果集中的重复行。指定两者都是错误的 选项。 DISTINCTROW是DISTINCT的同义词。
答案 2 :(得分:0)
在Mysql中,带有distinct的结果由所有选定的列确定,而不是由一个有区别的列确定,也许你应该编写另一个查询以获得不同的nid。