【问题标题】:SQL select with conditions and without duplicates有条件且无重复的 SQL 选择
【发布时间】:2018-06-18 16:17:35
【问题描述】:

我正在尝试创建 SQL 查询以获取具有某些条件的特定实体。问题是我有一些我想避免的重复实体。 我的数据表(表代表驱动程序)是:

我想找一些具有特定设施 ID/停车场 ID 条件的司机。 例如,如果我想要 ID 为“2”的设施中的所有司机,我想获得:

11112 Michael Smith

而不是:

11112 Michael Smith
11112 Michael Smith

我希望停车场 ID 和设施 ID 一起发生同样的事情。

我试过了:

SELECT * FROM "DRIVERS" 
where facilityid = '2'
group by driverid

我得到了一个错误:

Could not execute 'SELECT * FROM "DRIVERS" where facilityid = '2' group by driverid'
invalid column name: The column 'DRIVERS.FIRSTNAME' is invalid in the select list because the GROUP BY clause or an aggregation function does not contain it: line 1 col 8 (at pos 7)

有什么想法吗? 谢谢!

【问题讨论】:

  • 一般 GROUP BY 规则说:如果指定了 GROUP BY 子句,则 SELECT 列表中的每个列引用必须标识一个分组列或者是一个集合函数的参数。
  • 不要使用select *和group by
  • 改为SELECT DISTINCT col1, col2, ...。
  • 在 MySQL 中可以工作

标签: sql database select group-by datatables


【解决方案1】:

如果您只想从表中获取不同的值,请执行以下操作:

SELECT DISTINCT *
FROM "DRIVERS"
WHERE facilityid = '2';

在聚合数据时应该使用GROUP BY

编辑: 要获得您要求的结果,您可以使用:

SELECT DISTINCT DRIVERID, FIRSTNAME, LASTNAME
FROM "DRIVERS"
WHERE facilityid = '2';

【讨论】:

  • 请注意,OP 不想要这样的结果。
【解决方案2】:

您将通过此查询获得结果。 select distinct(DRIVERID),FIRSTNAME,LASTNAME FROM "DRIVERS" where facilityid = '2'。

【讨论】:

  • 这会起作用,但仅供参考:DISTINCT 是修饰符而不是函数,它将应用于所有选定的列。括号() 将无效。
  • DISTINCT(column) - 根据 DISTINCT 中指定的列中存在的值为您提供结果,因为您只对一列执行不同的操作。如果 distinct 应用于所有列,则在 DISTINCT() 中传递该列是没有意义的。
  • 你的最后一句话完全正确,DISTINCT() 不是一个东西。 SELECT DISTINCT (A), B, C 与 SELECT DISTINCT A, B, C 相同。在() 中添加一列不会导致查询失败,它不会做任何事情。您可以将所有列放在 () 中,它也不会改变任何内容:SELECT DISTINCT (A), (B), (C)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 2013-03-21
相关资源
最近更新 更多