带有多个DISTINCT的SQL语句

时间:2012-11-29 01:33:16

标签: mysql sql distinct

我正在尝试构建的查询将使用 tableA 中的以下列:

  • 名称
  • 描述

查询应提供以下过滤器:

  • tableA 中选择不重复的名称
  • 仅选择没有重复说明的名称
  • 选择不包含字符串的说明:“任意”或“已删除”
  • 按名称排序

这是我当前的陈述,它给了我除了重复描述之外的所有内容。如何将其添加到我当前的陈述中?

  

选择

 DISTINCT name FROM tableA

 WHERE description NOT LIKE 'Any%'

 AND description NOT LIKE 'Deleted%'
     

按名称排序

4 个答案:

答案 0 :(得分:1)

你应该尝试使用自我加入 使用左侧表格筛选以“任意”或“已删除”开头的说明。由于您要消除具有重复描述的行,因此您只能选择右侧匹配的行具有相同描述但找不到其他名称的结果:

SELECT
    leftSide.name,
    leftSide.description
FROM
    tableA as leftSide
    LEFT JOIN tableA as rightSide ON (
        leftSide.description = rightSide.description AND
        leftSide.name <> rightSide.name
    )
WHERE
    rightSide.description IS NULL AND
    leftSide.description NOT LIKE 'Any%' AND
    leftSide.description NOT LIKE 'Deleted%'
GROUP BY
    leftSide.name, leftSide.description
ORDER BY
    leftSide.name

答案 1 :(得分:0)

SELECT

 DISTINCT name FROM tableA

 WHERE description NOT LIKE 'Any%','Deleted%'

ORDER BY name

答案 2 :(得分:0)

这会是您正在寻找的解决方案吗?

参考:SQLFIDDLE

查询:

select distinct name, des
from data
where des not like '%any%'
and des not like '%delete%'
order by name ASC;

结果:

NAME    DES

mary    yeah all or none
tim     yeah all or none
you     did you see he is in

答案 3 :(得分:0)

SELECT t.name 来自tableA AS t GROUP BY t.name 有COUNT(*)= 1和t.description不喜欢'任何%'和t.description不喜欢'删除%' ORDER BY t.name;