【问题标题】:MySQL Multiple Duplicate Rows - Return Only OneMySQL 多个重复行 - 只返回一个
【发布时间】:2013-10-15 02:20:03
【问题描述】:

我通过脚本将我的 iTunes 资料库导入到表格中。该脚本没有捕捉到任何重复的歌曲名称和艺术家。因此,我有很多重复的歌曲。

trackid    song    artist   tracknum
4628       Title1  StackO      2
6846       YMCA    (blank)     11
9043       YMCA    (blank)     11
9381       YMCA    (blank)     11
9382       Title2  StackO      3

当歌曲、艺术家和 tracknum 都相同时,我将如何编写我的 SQL 语句以仅返回 YMCA (4628) 行的第一个“trackid”?它应该看起来像这样......

trackid    song    artist   tracknum
4628       Title1  StackO      2
6846       YMCA    (blank)     11
9382       Title2  StackO      3

这是我现在的 SQL...

"SELECT DISTINCT * FROM wp_tracks WHERE title LIKE '%" . $song . "%' AND artist LIKE '%" . $artist . "%'

这让我困惑了一段时间。

谢谢。

【问题讨论】:

  • @u_mulder - 我还需要返回 trackid。那只会返回一次,但正如我在问题中所说,我需要返回第一个结果,这样我就有了歌曲、艺术家和 trackid
  • 您应该澄清FIRST 的意思,因为这意味着订购,而您没有明确说明您想要什么顺序......所以FIRSTLAST 实际上并没有做任何感觉

标签: php mysql sql database


【解决方案1】:
SELECT song, artist, tracknum, MIN(trackid) AS first_track_id
FROM wp_tracks
GROUP BY song, artist, tracknum

添加 WHERE 子句以选择要列出的曲目。

【讨论】:

  • +1 也可能是 ORDER BY trackid ASC 以涵盖“仅返回 YMCA (4628) 的第一个“trackid””
  • @AlexP 实际上,OP 并没有澄清 FIRST 在这种情况下是否意味着 MIN
  • @AlexP 数据恰好与 MIN 匹配这一事实并不一定意味着它真的期待 MIN。 IMO,无论trackid如何,OP很可能只是想删除重复项,这就是他提到the first的原因。因此,很有可能甚至不需要聚合函数,只需将 trackid 留在 select 中即可提高查询效率。
【解决方案2】:

你必须提到你想成为 DISTINCT 的哪一列,在你的情况下是song

SELECT DISTINCT song FROM wp_tracks
WHERE title LIKE '%" . $song . "%' AND artist LIKE '%" . $artist . "%

【讨论】:

  • 这不能回答问题。它缺少列。
猜你喜欢
  • 2018-12-15
  • 2012-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
  • 2014-07-21
相关资源
最近更新 更多