【问题标题】:Cant figure out how to display table data with only same values [duplicate]无法弄清楚如何显示只有相同值的表数据[重复]
【发布时间】:2019-08-23 02:55:31
【问题描述】:

我正在使用 nodejs,带有 express、mysql 和 js。我有一个名为EVENT 的表,我正在处理的一个查询是仅显示表上具有相同start_time 的数据。基本上以 conflicting start_time 显示所有数据。

我尝试了一堆不同的查询,但我无法让它工作。

任何帮助将不胜感激。

db.query(
    'select start_time 
    FROM EVENT 
    INNER JOIN select start_time FROM EVENT GROUP BY start_time HAVING COUNT(EVENT > 1)', 
    function (err, result) {
      if (err) {
        res.status(500).send({error: true, message: "Error Querying Database"});
        // throw err;
      }

【问题讨论】:

  • 能否向我们展示示例数据和预期输出?

标签: javascript mysql sql node.js


【解决方案1】:

您似乎希望提取所有 start_time 不是唯一的记录。以下是一些解决方案,按效率降序排列。

在 MySQL 8.0 中,这可以通过窗口函数来实现,例如:

SELECT *
FROM (
    SELECT e.*, COUNT(*) OVER(PARTITION BY start_time) cnt FROM events
) x WHERE cnt > 1

在早期版本中,您可以将EXISTS 条件与相关子查询一起使用:

SELECT *
FROM events e
WHERE EXISTS (
    SELECT 1 
    FROM events e1 
    WHERE e1.start_time = e.start_time AND e1.id != e.id
)

这假设您有一列可用于消除具有相同start_time 的记录的歧义(我称之为id)。如果不这样做,您可以使用带有相关子查询的 IN 条件,该子查询列出了不止一次出现的 start_times,例如:

SELECT *
FROM events
WHERE event_date IN (
    SELECT start_time FROM events GROUP BY start_time HAVING COUNT(*) > 1
)

【讨论】:

  • 或加入内联视图SELECT e.* FROM ( SELECT c.start_time FROM event c GROUP BY c.start_time HAVING SUM(1) > 1 ) d JOIN event e ON e.start_time <=> d.start_time +10
  • 在这种情况下,这个问题是一个非常明显的重复问题,你应该投票关闭它,不要再回答了。
  • @Shadow:好的,同意...
  • @spencer7593: 是的,很好...我个人更喜欢内联视图而不是IN 方法,并使其成为列表中的第三个选择!
猜你喜欢
  • 1970-01-01
  • 2018-10-23
  • 2012-05-17
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
  • 2014-12-20
  • 2014-12-18
  • 1970-01-01
相关资源
最近更新 更多