我必须将数据插入到包含列(col 1,col2,col 3)的表中。
我有一个选择查询来选择要在此表中插入的数据。
Select A.id, b.id , '1'
from table a
inner join table b on a.id=b.id
where a.col= 'somevalue'and b.col ='othervalue' ...
如果您注意到选择陈述中的第三列,我的硬编码值为“1”。当前的要求是仅将总行的25%设置为“1”,将剩余的75%设置为“0”。现在困难的部分是我们无法确定select语句会产生多少行。 我们还可以使用update语句将25%的行更新为1,并将其保持为“0”,但限制功能将不接受任何用户定义的变量。
有人可以对此提出一些建议吗?
我正在使用MYSQL
答案 0 :(得分:0)
使用子查询获取总行数。然后使用用户定义的变量来获取输出中的行号,并将其与总数的25%进行比较。
SELECT a.id, b.id, IF(@counter < pct25, '1', '0'), @counter := @counter + 1
FROM table1 a
JOIN table2 b ON a.id = b.id
JOIN (SELECT COUNT(*)/25 AS pct25
FROM table1 a
JOIN table2 b ON a.id = b.id) AS x
CROSS JOIN (SELECT @counter := 0) AS var
答案 1 :(得分:0)
将数据插入表中时,请保留行号,并使用模运算:
insert into . . .
select a_id, b_id, (mod(rn, 4) = 0) as flag
from (Select A.id as a_id, b.id as b_id , (@rn := @rn + 1) as rn
from table a inner join
table b
on a.id = b.id cross join
(select @rn := 0) vars
where a.col = 'somevalue' and b.col = 'othervalue' ...
) i;
采取每四行的一个很好的特点是,这很有效,即使数据因join
而以某种方式排序。