Mysql 具有多个不同参数的SQL语句

Mysql 具有多个不同参数的SQL语句,mysql,sql,distinct,Mysql,Sql,Distinct,我试图构建的查询将使用表A中的以下列: 名字 描述 查询应提供以下筛选器: 从表A中选择不重复的名称 仅选择没有重复描述的名称 选择不包含字符串的描述:“任何”或“已删除” 点名 这是我目前的陈述,除了重复的描述之外,它给了我一切。如何将此添加到我当前的报表中 挑选 DISTINCT name FROM tableA WHERE description NOT LIKE 'Any%' AND description NOT LIKE 'Deleted%' 点名 这将是您正在寻

我试图构建的查询将使用表A中的以下列:

  • 名字
  • 描述
查询应提供以下筛选器:

  • 从表A中选择不重复的名称
  • 仅选择没有重复描述的名称
  • 选择不包含字符串的描述:“任何”或“已删除”
  • 点名
这是我目前的陈述,除了重复的描述之外,它给了我一切。如何将此添加到我当前的报表中

挑选

 DISTINCT name FROM tableA

 WHERE description NOT LIKE 'Any%'

 AND description NOT LIKE 'Deleted%'
点名


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

参考:

查询:

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

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

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
选择
leftSide.name,
左侧。说明
从…起
左边的表格
左连接表A,如右侧所示(
leftSide.description=rightSide.description和
leftSide.name rightSide.name
)
哪里
rightSide.description为NULL,并且
leftSide.description不象“Any%”和
leftSide.description与“已删除%”不同
分组
leftSide.name,leftSide.description
订购人
leftSide.name
选择t.name 从表A到表t 按t.name分组 计数(*)为1,t.description不象“Any%”,t.description不象“Deleted%”
按t.名称排序

约翰不应该出现两次。我只想要不同的名字和描述。啊,还是没有。由于描述重复,玛丽和蒂姆中只能出现一个。也许这是一个更好的描述。我有一张工作表(外部…我没有完成,所以这是我的清洁过程)。每个工作都有一个描述。有些作业具有重复的名称和不同的描述。有些名称不同,但描述重复。基本上我不希望两列都重复。我不想看到两个职位相同的人,也不想看到两个描述相同的人。我现在注意到:)您希望在多个varchar字段上显示不同的内容。如果你有一个int字段,这会更容易,因为有一个varchar,这个问题变得很有趣+(一)这似乎不是我想要的。这里有一个SQL小提琴。我的桌子上应该没有重复的。没有重复的名称,没有重复的描述。谢谢,SQL提琴帮助我把打字错误归零!哈哈,没问题。让我试试你最近的一个。这可能有用。有没有办法保留第一个不同的而不是第二个?在小提琴中,如何才能得到第一个“EN”行而不是第二个“行”呢?因为没有办法可靠地预测名字中的重复出现在第一个、中间部分或最后一个位置,考虑删除< <代码>组的名称< /代码>子句的一部分。这样,您将看到具有相同名称的唯一描述的行。实际上,第一个“Eng”行被取消资格,因为它与“Eng,General”具有相同的描述。从您发布的select语句中,仅显示一个字段“name”。
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