填写没有重复的表格

时间:2017-11-09 20:24:04

标签: sql insert duplicates

我正在尝试使用此表格中的值填充表格

CREATE TABLE PLATOS(Idplatos integer PRIMARY KEY, Tipo varchar(20), PlatoP varchar(20));

INSERT INTO Platos VALUES('1','entrada','ceviche');
INSERT INTO Platos VALUES('2','entrada','arrozleche');
INSERT INTO Platos VALUES('3','sopa','caldo');
INSERT INTO Platos VALUES('4','sopa','mote');
INSERT INTO Platos VALUES('5','plato','lomo');
INSERT INTO Platos VALUES('6','plato','rusa');

对此:

Create table abril2017(nrodia integer,entrada varchar(20), sopa varchar(20), plato varchar(20),unique(entrada,sopa,plato));

我试过这段代码

    declare @nd int
    set @nd=1
    while @nd<=31
    begin

    Insert into  abril2017 values (@nd,
   (Select TOP 1 PlatoP from Platos where tipo = 'entrada' oRDER BY NEWID()),
    (Select TOP 1 PlatoP from Platos where tipo = 'sopa'  Order by NewId()),
    (Select TOP 1 PlatoP from Platos where tipo = 'plato' oRDER by NewId()))
    SET @nd=@nd+1
    end

到目前为止,结果还可以,但我不想要的错误是:

  

1)nrodia,只有当成功插入时,才必须为+1   始终是+1,这破坏了他的目的。 nrodia的意思是“daynumber”。

     

2)违反UNIQUE KEY约束   'UQ__abril201__24030ECAAB418A64'。无法插入重复键   对象'dbo.abril2017'。重复的键值是(arrozleche,mote,   LOMO)。声明已经终止。

出现此错误,但无论如何我的所有值都插入而没有重复,我只是不想在执行插入的最后一个代码时显示这个或类似的东西,我不知道这是一个错误还是只是相似的东西?。 最后代码工作,只有那些问题必须修复,第一个表实际上有15个值而不仅仅是6,所以万一有人可以为我提供更多值的情况的解决方案会更好,谢谢。

1   arrozleche  caldo   lomo
3   arrozleche  mote    lomo
4   ceviche     mote    lomo
5   ceviche     mote    rusa
7   arrozleche  mote    rusa
8   ceviche     caldo   rusa
11  ceviche     caldo   lomo
16  arrozleche  caldo   rusa

如何看到所有可能的组合来自第一个表中不重复的值(但仍然显示问题编号2)),左边的数字必须是1,2,3 ..直到最后一行,在这种情况下为8.这只是一个例子,如果你使用代码插入,你会有一个不同的表,因为插入的值是随机的。

1 个答案:

答案 0 :(得分:0)

你可以这样做:

declare @nd int
set @nd=1
DECLARE @xEntrada VARCHAR(20), @xSopa varchar(20), @xPlato varchar(20)
DECLARE @xResultCount INT = 8
while @nd<=31
begin
    Select TOP 1 @xEntrada = PlatoP from Platos where tipo = 'entrada' oRDER BY NEWID()
    Select TOP 1 @xSopa = PlatoP from Platos where tipo = 'sopa'  Order by NewId()
    Select TOP 1 @xPlato = PlatoP from Platos where tipo = 'plato' oRDER by NewId()

    IF (NOT EXISTS(SELECT 1 FROM abril2017 WHERE Entrada = @xEntrada AND Sopa = @xSopa AND Plato = @xPlato))
    BEGIN
        Insert into  abril2017 values (@nd,@xEntrada,@xSopa,@xPlato)
        SET @nd=@nd+1
        SET @xResultCount = @xResultCount - 1
        IF(@xResultCount = 0)
            BREAK
    END
END;