【发布时间】: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 你能在这里添加你的评论作为答案吗?然后我可以接受它作为我问题的有效答案;)