我有一个名为loc的表有属性locid,sid,role,link,href。 我需要提取所有这些超链接id 1,2,3,4,5,6,7,8,9 但是3有两个位置3& 4.我需要从3和4中提取内容。但我的sid不应重复
Locid Sid
1 1
2 2
3 3
4 3
5 4
6 7
7 7
8 7
9 8
10 8
11 4
12 4
13 9
14 4
我的出局应该采用这种形式
Sid locid
1 1
2 2
3 3
4
4 5
11
12
14
7 6
7
8
8 9
10
9 13
答案 0 :(得分:1)
select
sid = case when rn1 = 1 then sid end,
locid
from
(
select
sid,
locid,
rn1 = row_number() over(partition by sid order by locid),
rn2 = row_number() over(order by sid, locid)
from tablename
) t
order by rn2
答案 1 :(得分:0)
那么你的结果不是一个干净的二维表,所以你必须将locid卷成一个值。 MySql提供GROUP_CONCAT
函数:
我没有测试过这个,但是有点像:
SELECT sid, GROUP_CONCAT( locid SEPARATOR ', ') FROM mytable GROUP BY sid
这将导致:
1 1,
2 2,
3 3, 4
4 5, 11, 12, 14
答案 2 :(得分:0)
我不明白你是想保留空格还是删除sid值重复的地方。 这应该只为您提供唯一sid值的行
SELECT sid, locid FROM mytable GROUP BY sid;
如果您有大量数据,您可以选择并插入另一个表或文本文件
CREATE TABLE temp LIKE mytable;
INSERT INTO temp
SELECT sid, locid FROM mytable GROUP BY sid;
DROP mytable;
ALTER TABLE temp RENAME mytable;
或在文本文件中输出的那个:
SELECT sid, locid FROM mytable GROUP BY sid
INTO OUTFILE 'C:/myfolder/mytextfile.txt';
尝试更新你的帖子:)