我不是最好用sql但我尽力让我的问题完成。我有一张桌子"只是"其中填充了列(ID(PK,Identity),Char,Serv,Random)。现在我想从这个表中选择一个随机行并将其插入表格" f_WinGet"。到目前为止,我的所有程序都采用了这一步,但我总是在第二个表中获得Duplicates。
第一张表:84行 第二个表格:84个随机需要35个。
我尝试了很多其他方法,但我总是得到相同的结果。我的所有随机程序都被绑定到一个按钮,一个C#程序。到目前为止一切正常,但我的表中总是有一些重复的行。
INSERT INTO f_TWinGet
SELECT TOP 1 Percent Char, Serv, Random
FROM ( select distinct Char, Serv, Random from dbo.just) as derived1
ORDER BY CHECKSUM(NEWID())
如果有人想要我如何解决我的问题,那就太好了。我还在努力,但我得到的所有结果都是一样的。
答案 0 :(得分:1)
您要插入35行,一次完成所有操作:
INSERT INTO f_TWinGet(char, serv, random)
SELECT TOP 35 Char, Serv, Random
FROM (select distinct Char, Serv, Random
from dbo.just
) derived1
ORDER BY CHECKSUM(NEWID());
如果你真的想一次一个地做,我建议使用not exists
:
INSERT INTO f_TWinGet(char, serv, random)
SELECT TOP 1 Char, Serv, Random
FROM (select distinct Char, Serv, Random
from dbo.just
) d
WHERE not exists (select 1 from f_TWinGet f where t.char = f.char and t.serv = f.serv and t.random = f.random)
ORDER BY CHECKSUM(NEWID());
请注意,char
是一个保留字,因此它应该是方括号。我要在你的查询中留下你拥有它们的名字。
答案 1 :(得分:0)
使用与您一样小的桌子,您可以使用以下内容:
INSERT INTO f_TWinGet
SELECT TOP 1 j.Char, j.Serv, j.Random
FROM dbo.just j
LEFT JOIN f_TWinGet f
ON f.Char = j.Char
AND j.Serv = f.Serv
AND j.Random = f.Random
WHERE f.Char IS NULL
ORDER BY NEWID()
这样可以确保您尝试插入的值不在最终表格中。