首页 > 解决方案 > 无法弄清楚如何显示只有相同值的表数据

问题描述

我正在使用 nodejs,带有 express、mysql 和 js。我有一个名为的表EVENT,我正在处理的一个查询是仅显示表上具有相同的数据start_time。基本上显示所有具有冲突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;
      }

标签: javascriptmysqlsqlnode.js

解决方案


您似乎正在寻找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_time多次出现的 s,例如:

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

推荐阅读