You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL技术问询:查询同表同ID的其他行及多表关联问题

MySQL 查询与表关联操作解决方案

我来帮你解决这两个MySQL相关的问题,都是日常开发里很常见的场景:

1. 同一张表中查询所有具有相同ID的其他行

这里分两种常见场景来处理:

场景1:已知特定ID,查询该ID对应的所有行

如果已经知道要找的ID值,直接用WHERE条件过滤就行,非常直观:

-- 把your_table换成你的实际表名,34换成目标ID
SELECT * FROM your_table WHERE ID = 34;

场景2:找出所有存在重复ID的行(即ID出现多次的所有记录)

要是你想找出表中所有ID不止出现一次的行,可以用两种方法实现:

方法一:使用GROUP BY + 子查询

先通过分组找出重复的ID,再关联原表获取完整记录:

SELECT t.*
FROM your_table t
JOIN (
    -- 先筛选出出现次数大于1的ID
    SELECT ID
    FROM your_table
    GROUP BY ID
    HAVING COUNT(*) > 1
) dup_ids ON t.ID = dup_ids.ID;

方法二:使用窗口函数(MySQL 8.0及以上版本支持)

窗口函数写法更简洁,适合新版本MySQL:

SELECT *
FROM (
    -- 给每个ID分组统计出现次数
    SELECT *, COUNT(*) OVER (PARTITION BY ID) AS id_occurrences
    FROM your_table
) t
-- 只保留出现次数大于1的记录
WHERE t.id_occurrences > 1;

2. Songs表与关联表的常见操作

先明确你提供的Songs表结构和数据:

TitleIDVersion
songnumber134original
songnumber235remix
songnumber336remix

假设关联表是SongAssociations(用于记录歌曲间的关联关系,比如原版和remix的对应),常见结构如下:

song_idassociated_song_idrelation_type
3435remix_of
3534original_of

下面是几种高频的关联操作:

关联查询:获取关联歌曲的详细信息

比如想查询所有remix歌曲对应的原版歌曲名称:

SELECT 
    s.Title AS remix_song,
    s_assoc.Title AS original_song
FROM Songs s
JOIN SongAssociations sa ON s.ID = sa.song_id
JOIN Songs s_assoc ON sa.associated_song_id = s_assoc.ID
WHERE sa.relation_type = 'remix_of';

执行后会返回remix歌曲和它对应的原版歌曲的对应关系。

插入关联关系:添加歌曲间的关联记录

比如给songnumber2(ID35)和songnumber1(ID34)添加双向关联:

INSERT INTO SongAssociations (song_id, associated_song_id, relation_type)
VALUES 
    (35, 34, 'remix_of'),
    (34, 35, 'original_of');

双向关联能让后续查询更灵活,不管从原版还是remix出发都能找到对应歌曲。

删除关联关系:移除指定歌曲间的关联

如果要删除ID35和ID34之间的所有关联记录:

DELETE FROM SongAssociations
WHERE 
    (song_id = 35 AND associated_song_id = 34)
    OR (song_id = 34 AND associated_song_id = 35);

内容的提问来源于stack exchange,提问作者user9675479

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:27:26