先看下代码:
CREATE TEMPORARY TABLE `tbl_temp_morenum` (
`common.ucHostNum` char(16) NOT NULL default '',
`common.ucNumber1` char(16) NOT NULL default '',
`common.ucNumber2` char(16) NOT NULL default '',
`common.ucNumber3` char(16) NOT NULL default '',
`common.ucNumber4` char(16) NOT NULL default '',
`common.ucNumber5` char(16) NOT NULL default '',
`common.ucNumber6` char(16) NOT NULL default '',
`common.ucNumber7` char(16) NOT NULL default '',
`common.ucNumber8` char(16) NOT NULL default ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into tbl_temp_morenum
select DISTINCT U.ucNumber, I.ucNumber, I.ucNumber, I.ucNumber, I.ucNumber, I.ucNumber,
I.ucNumber, I.ucNumber, I.ucNumber
from tbl_UserData as U
Join tbl_UserIndex as I on I.ulUsn = U.ulUSN
where U.ucNumber <> I.ucNumber and I.ulUsn = U.ulUSN;
我希望看到的结果:将tbl_UserIndex里面所有ulUsn字段值相同的记录的ucNumber字段插入到tbl_temp_morenum临时表里面(当然,tbl_UserIndex中ulUsn相同的记录最多只有9条),组成一条记录。
实际输出的结果:插入了8条记录(希望是一条),8条记录中common.ucHostNum相同,同一条记录中的common.ucNumber1到common.ucNumber8是相同的。
请问该怎么样才能是想想要的结果?
CREATE TEMPORARY TABLE `tbl_temp_morenum` (
`common.ucHostNum` char(16) NOT NULL default '',
`common.ucNumber1` char(16) NOT NULL default '',
`common.ucNumber2` char(16) NOT NULL default '',
`common.ucNumber3` char(16) NOT NULL default '',
`common.ucNumber4` char(16) NOT NULL default '',
`common.ucNumber5` char(16) NOT NULL default '',
`common.ucNumber6` char(16) NOT NULL default '',
`common.ucNumber7` char(16) NOT NULL default '',
`common.ucNumber8` char(16) NOT NULL default ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into tbl_temp_morenum
select DISTINCT U.ucNumber, I.ucNumber, I.ucNumber, I.ucNumber, I.ucNumber, I.ucNumber,
I.ucNumber, I.ucNumber, I.ucNumber
from tbl_UserData as U
Join tbl_UserIndex as I on I.ulUsn = U.ulUSN
where U.ucNumber <> I.ucNumber and I.ulUsn = U.ulUSN;
我希望看到的结果:将tbl_UserIndex里面所有ulUsn字段值相同的记录的ucNumber字段插入到tbl_temp_morenum临时表里面(当然,tbl_UserIndex中ulUsn相同的记录最多只有9条),组成一条记录。
实际输出的结果:插入了8条记录(希望是一条),8条记录中common.ucHostNum相同,同一条记录中的common.ucNumber1到common.ucNumber8是相同的。
请问该怎么样才能是想想要的结果?
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
select DISTINCT U.ucNumber,DISTINCT I.ucNumber,DISTINCT I.ucNumber,DISTINCT I.ucNumber,DISTINCT I.ucNumber,DISTINCT I.ucNumber,DISTINCT
I.ucNumber, DISTINCT I.ucNumber,DISTINCT I.ucNumber
from tbl_UserData as U
Join tbl_UserIndex as I on I.ulUsn = U.ulUSN
where U.ucNumber <> I.ucNumber and I.ulUsn = U.ulUSN;试试看。另外请给出你的测试数据。
create procedure sp_morenum_query(
IN p_taskID INT,
OUT p_iRet INT,
IN p_ucHostNum varchar(16)
),
再看下面的零时表格代码:
CREATE TEMPORARY TABLE `tbl_temp_morenum` (
`common.ucHostNum` char(16) NOT NULL default '',
`common.ucNumber1` char(16) NOT NULL default '',
`common.ucNumber2` char(16) NOT NULL default '',
`common.ucNumber3` char(16) NOT NULL default '',
`common.ucNumber4` char(16) NOT NULL default '',
`common.ucNumber5` char(16) NOT NULL default '',
`common.ucNumber6` char(16) NOT NULL default '',
`common.ucNumber7` char(16) NOT NULL default '',
`common.ucNumber8` char(16) NOT NULL default ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into tbl_temp_morenum
select DISTINCT U.ucNumber, I.ucNumber, I.ucNumber, I.ucNumber, I.ucNumber, I.ucNumber,
I.ucNumber, I.ucNumber, I.ucNumber
from tbl_UserData as U
Join tbl_UserIndex as I on I.ulUsn = U.ulUSN
where U.ucNumber <> I.ucNumber and I.ulUsn = U.ulUSN;
其中common.ucHostNum、common.ucNumber1到common.ucNumber8时EXCEL里定义的公用参数,这9个数据都存在于tbl_UserIndex,其对应字段为ucNumber(插入数据的时候,把9个号码分次插入tbl_UserIndex的ucNumber字段,其ulUsn字段一样),9个数据在tbl_UserIndex里都有相同的ulUsn字段,其值相同;
我希望看到的结果:将tbl_UserIndex里面所有ulUsn字段值相同的记录的ucNumber字段插入到tbl_temp_morenum临时表里面(当然,tbl_UserIndex中ulUsn相同的记录最多只有9条),组成一条记录。
实际输出的结果:插入了8条记录(希望是一条),8条记录中common.ucHostNum相同,同一条记录中的common.ucNumber1到common.ucNumber8是相同的。
测试数据:输入了9个数据:
15884504480 23654 23655 23656 23657 23658 23659 23660 23661
将这9个数据存入tbl_UserIndex时赋予相同的ulUsn(最多只有这9条记录的ulUsn值相同),
我希望看到的结果:
主号码 号码1 号码2 号码3 号码4 号码5 号码6 号码7 号码8
15884504480 23654 23655 23656 23657 23658 23659 23660 23661实际测出的结果:
主号码 号码1 号码2 号码3 号码4 号码5 号码6 号码7 号码8
15884504480 23654 23654 23654 23654 23654 23654 23654 23654
15884504480 23655 23655 23655 23655 23655 23655 23655 23655
15884504480 23656 23656 23656 23656 23656 23656 23656 23656
15884504480 23657 23657 23657 23657 23657 23657 23657 23657
15884504480 23658 23658 23658 23658 23658 23658 23658 23658
15884504480 23659 23659 23659 23659 23659 23659 23659 23659
15884504480 23660 23660 23660 23660 23660 23660 23660 23660
15884504480 23661 23661 23661 23661 23661 23661 23661 23661
上面我的插入数据写得有问题,请问如何做才能有我想要的结果??
我希望看到的结果:
主号码 号码1 号码2 号码3 号码4 号码5 号码6 号码7 号码8
15884504480 23654 23655 23656 23657 23658 23659 23660 23661
下面是将数据插入tbl_UserIndex的代码:
if(p_ucNumber1 is NULL or p_ucNumber1 = "") then
SET p_iRet = 88046;
SET l_cNmsRet1 = '输入参数不能为空';
SET l_cNmsRet2 = '号码1';
leave label_main;
else
call sp_get_rowno_and_rowid('tbl_UserIndex',l_iRowNo,l_iRowID);
insert into tbl_UserIndex(ucDnSet,usCentrexGrp,ucNumber,usModuleNo,ulUsn,iRowID,iRowNo,iRowState)
values(l_ucDnSet,l_CentrexGrp,p_ucNumber1,l_ModuleNo,l_ulUSN,l_iRowID,l_iRowNo,l_iRowState);
end if;
if(p_ucNumber2 is not NULL and p_ucNumber2 <> "") then
call sp_get_rowno_and_rowid('tbl_UserIndex',l_iRowNo,l_iRowID);
insert into tbl_UserIndex(ucDnSet,usCentrexGrp,ucNumber,usModuleNo,ulUsn,iRowID,iRowNo,iRowState)
values(l_ucDnSet,l_CentrexGrp,p_ucNumber2,l_ModuleNo,l_ulUSN,l_iRowID,l_iRowNo,l_iRowState);
end if;
if(p_ucNumber3 is not NULL and p_ucNumber3 <> "") then
call sp_get_rowno_and_rowid('tbl_UserIndex',l_iRowNo,l_iRowID);
insert into tbl_UserIndex(ucDnSet,usCentrexGrp,ucNumber,usModuleNo,ulUsn,iRowID,iRowNo,iRowState)
values(l_ucDnSet,l_CentrexGrp,p_ucNumber3,l_ModuleNo,l_ulUSN,l_iRowID,l_iRowNo,l_iRowState);
end if;
if(p_ucNumber4 is not NULL and p_ucNumber4 <> "") then
call sp_get_rowno_and_rowid('tbl_UserIndex',l_iRowNo,l_iRowID);
insert into tbl_UserIndex(ucDnSet,usCentrexGrp,ucNumber,usModuleNo,ulUsn,iRowID,iRowNo,iRowState)
values(l_ucDnSet,l_CentrexGrp,p_ucNumber4,l_ModuleNo,l_ulUSN,l_iRowID,l_iRowNo,l_iRowState);
end if;
if(p_ucNumber5 is not NULL and p_ucNumber5 <> "") then
call sp_get_rowno_and_rowid('tbl_UserIndex',l_iRowNo,l_iRowID);
insert into tbl_UserIndex(ucDnSet,usCentrexGrp,ucNumber,usModuleNo,ulUsn,iRowID,iRowNo,iRowState)
values(l_ucDnSet,l_CentrexGrp,p_ucNumber5,l_ModuleNo,l_ulUSN,l_iRowID,l_iRowNo,l_iRowState);
end if;
if(p_ucNumber6 is not NULL and p_ucNumber6 <> "") then
call sp_get_rowno_and_rowid('tbl_UserIndex',l_iRowNo,l_iRowID);
insert into tbl_UserIndex(ucDnSet,usCentrexGrp,ucNumber,usModuleNo,ulUsn,iRowID,iRowNo,iRowState)
values(l_ucDnSet,l_CentrexGrp,p_ucNumber6,l_ModuleNo,l_ulUSN,l_iRowID,l_iRowNo,l_iRowState);
end if;
if(p_ucNumber7 is not NULL and p_ucNumber7 <> "") then
call sp_get_rowno_and_rowid('tbl_UserIndex',l_iRowNo,l_iRowID);
insert into tbl_UserIndex(ucDnSet,usCentrexGrp,ucNumber,usModuleNo,ulUsn,iRowID,iRowNo,iRowState)
values(l_ucDnSet,l_CentrexGrp,p_ucNumber7,l_ModuleNo,l_ulUSN,l_iRowID,l_iRowNo,l_iRowState);
end if;
if(p_ucNumber8 is not NULL and p_ucNumber8 <> "") then
call sp_get_rowno_and_rowid('tbl_UserIndex',l_iRowNo,l_iRowID);
insert into tbl_UserIndex(ucDnSet,usCentrexGrp,ucNumber,usModuleNo,ulUsn,iRowID,iRowNo,iRowState)
values(l_ucDnSet,l_CentrexGrp,p_ucNumber8,l_ModuleNo,l_ulUSN,l_iRowID,l_iRowNo,l_iRowState);
end if;
所有参数均是合法的,插入的数据:
号码1 号码2 号码3 号码4 号码5 号码6 号码7 号码8
23654 23655 23656 23657 23658 23659 23660 23661
插入后tbl_UserIndex里面有9条ulUsn相同的记录,还有一个是号码为15884504480的,
在tbl_UserIndex记录如下:
{…15882504480,0,…}
{…23654,0,…}
{…23655,0,…}
{…23656,0,…}
{…23657,0,…}
{…23658,0,…}
{…23659,0,…}
{…23660,0,…}
{…23661,0,…}用3楼的插入数据的方法得到的结果:
主号码 号码1 号码2 号码3 号码4 号码5 号码6 号码7 号码8
15884504480 23654 23654 23654 23654 23654 23654 23654 23654
15884504480 23655 23655 23655 23655 23655 23655 23655 23655
15884504480 23656 23656 23656 23656 23656 23656 23656 23656
15884504480 23657 23657 23657 23657 23657 23657 23657 23657
15884504480 23658 23658 23658 23658 23658 23658 23658 23658
15884504480 23659 23659 23659 23659 23659 23659 23659 23659
15884504480 23660 23660 23660 23660 23660 23660 23660 23660
15884504480 23661 23661 23661 23661 23661 23661 23661 23661
我希望得到的结果:
主号码 号码1 号码2 号码3 号码4 号码5 号码6 号码7 号码8
15884504480 23654 23655 23656 23657 23658 23659 23660 23661
在线等待中,多谢各位前来解答
CREATE TEMPORARY TABLE `tbl_temp_morenum` (
`common.ucHostNum` char(16) NOT NULL default '',
`common.ucNumber1` char(16) NOT NULL default '',
`common.ucNumber2` char(16) NOT NULL default '',
`common.ucNumber3` char(16) NOT NULL default '',
`common.ucNumber4` char(16) NOT NULL default '',
`common.ucNumber5` char(16) NOT NULL default '',
`common.ucNumber6` char(16) NOT NULL default '',
`common.ucNumber7` char(16) NOT NULL default '',
`common.ucNumber8` char(16) NOT NULL default ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
怎么样插入才能有想要的结果呢?谢谢答疑
tbl_UserIndex{…ucNumber,ulUsn…}
数据
{…15882504480,0,…}
{…23654,0,…}
{…23655,0,…}
{…23656,0,…}
{…23657,0,…}
{…23658,0,…}
{…23659,0,…}
{…23660,0,…}
{…23661,0,…}
我希望得到的结果:
主号码 号码1 号码2 号码3 号码4 号码5 号码6 号码7 号码8
15884504480 23654 23655 23656 23657 23658 23659 23660 23661
比如
23654 1
23655 2
select ucNumber,(select ucNumber from tbl_UserIndex where ulUsn=a.ulUsn and fid=1) as 号码1 ,
(select ucNumber from tbl_UserIndex where ulUsn=a.ulUsn and fid=2) as 号码2 ,
.....
from tbl_UserIndex a where ucNumber='15882504480'
(select ucNumber from tbl_UserIndex where ulUsn=a.ulUsn and fid=2) as 号码2 ,
.....
from tbl_UserIndex a where ucNumber='15882504480'
iRowID字段是唯一的,但是ulUsn相同的记录的iRowID可能不连续,所以比较难搞,我是搞C的,现在公司BMS的存储过程没人写,就叫我写了。
DECLARE CURSOR DD FOR
SELECT ucNumber,ulUsn FROM tbl_UserIndex WHERE ulUsn=(SELECT ulUsn FROM tbl_UserIndex
WHERE ucNumber='15882504480')
打开游标、循环、插入记录即可
创建的临时表CREATE TEMPORARY TABLE `tbl_temp_morenum` (
`common.ucHostNum` char(16) NOT NULL default '',
`common.ucNumber1` char(16) NOT NULL default '',
`common.ucNumber2` char(16) NOT NULL default '',
`common.ucNumber3` char(16) NOT NULL default '',
`common.ucNumber4` char(16) NOT NULL default '',
`common.ucNumber5` char(16) NOT NULL default '',
`common.ucNumber6` char(16) NOT NULL default '',
`common.ucNumber7` char(16) NOT NULL default '',
`common.ucNumber8` char(16) NOT NULL default ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
插入一个字段common.ucHostNum的值后,怎么跳到下一个字段common.ucNumber1,