This question already has answers here:
Finding duplicate values in MySQL
                                
                                    (24个答案)
                                
                        
                                在10个月前关闭。
            
                    
我正在使用带有express,mysql和js的nodejs。我有一个名为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;
      }

最佳答案

您似乎希望提取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,例如:

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

10-04 11:55
查看更多