Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 是否从一行中选择重复项?_Mysql_Sqlite - Fatal编程技术网

Mysql 是否从一行中选择重复项?

Mysql 是否从一行中选择重复项?,mysql,sqlite,Mysql,Sqlite,这里有一个名为CoreTracks的表: +---------+-----------------+----------+----------+----------+---------+ | TrackId | URI | ArtistID | Title | FileSize | BitRate | +---------+-----------------+----------+----------+----------+---------+ | 1

这里有一个名为CoreTracks的表:

+---------+-----------------+----------+----------+----------+---------+
| TrackId |       URI       | ArtistID |  Title   | FileSize | BitRate |
+---------+-----------------+----------+----------+----------+---------+
|  1      | /home/music/... |   234    | atune    |  8958223 |   192   |
|  2      | /home/music/... |   427    | goodsong |  6954373 |   192   |
|  3      | /home/music/... |   427    | goodsong |  4695698 |   128   |
|  4      | /home/music/... |   427    | goodsong |  5839962 |   160   |
|  5      | /home/music/... |   427    | goodsong |  4695698 |   128   |
|  6      | /home/music/... |   522    | another  |  3458859 |   128   |
+---------+-----------------+----------+----------+----------+---------+
我想要的是:

+---------+-----------------+----------+----------+----------+---------+
| TrackId |       URI       | ArtistID |  Title   | FileSize | BitRate |
+---------+-----------------+----------+----------+----------+---------+
|  3      | /home/music/... |   427    | goodsong |  4695698 |   128   |
|  4      | /home/music/... |   427    | goodsong |  5839962 |   160   |
|  5      | /home/music/... |   427    | goodsong |  4695698 |   128   |
+---------+-----------------+----------+----------+----------+---------+
我正在尝试删除重复项,因为它们具有相同的标题、相同的艺术家id和不同的曲目id,同时不返回具有最高比特率和最高文件大小的条目

到目前为止,我得到的是:

SELECT * FROM CoreTracks 
WHERE Title = Title AND ArtistID = ArtistID 
AND BitRate != (SELECT MAX(BitRate) FROM CoreTracks WHERE Title = Title AND ArtistID = ArtistID) 
AND FileSize != (SELECT MAX(FileSize) FROM CoreTracks WHERE Title = Title AND ArtistID = ArtistID);
它返回每一个音轨。要使此查询正常工作,我缺少什么?

从group by Title、ArtistID sort by BitRate asc中选择max(trackId)-然后将其包装到另一个Select by trackId中

SELECT A.* FROM CoreTracks A, CoreTracks B 
WHERE A.Title = B.Title AND A.ArtistID = B.ArtistID AND A.trackId != B.trackId
HAVING A.BitRate != MAX(A.BitRate) AND A.FileSize != MAX(A.FileSize);

尚未测试,但应能正常工作。

这将得到相反的结果(即跳过重复项):

以及副本:

SELECT c1.*
  FROM CoreTracks c1
      ,(SELECT Title, ArtistID, MAX(FileSize) AS maxFileSize, MAX(BitRate) maxBitRate
          FROM CoreTracks
          GROUP BY Title, ArtistID) c2
  WHERE c1.Title = c2.Title
    AND c1.ArtistID = c2.ArtistID
    AND (c1.FileSize = c2.maxFileSize OR c1.BitRate = c2.maxBitRate)
SELECT c1.*
  FROM CoreTracks c1
      ,(SELECT Title, ArtistID, MAX(FileSize) AS maxFileSize, MAX(BitRate) maxBitRate
          FROM CoreTracks
          GROUP BY Title, ArtistID) c2
  WHERE c1.Title = c2.Title
    AND c1.ArtistID = c2.ArtistID
    AND (c1.FileSize != c2.maxFileSize AND c1.BitRate != c2.maxBitRate)

尝试自连接而不是普通查询。
我没有试过。

这看起来不错。但是,我使用的是sqlite(我是新手),它返回了一个错误:“SQL错误:滥用聚合函数max()”。此外,如果您想永久删除,可以将SELECT替换为delete。返回的错误是:“错误:在创建之前需要GROUP BY子句”。所以我把“groupbya.URI”放在HAVING子句前面,并没有返回任何数据。也许sql light在这方面有所不同。这太不可思议了。多谢各位!与其选择重复的结果,我该如何删除它们?@BrandonMinton您可以执行“从TrackId所在的CoreTracks中删除”(选择c1.TrackId FROM…),这非常有效,而且速度很快!@Glenn您让学习变得很有趣。再次感谢您。