SQL - Как добавить значение X, когда значение X не существует, против нескольких возможных значений для каждой записи - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть список людей с фруктами, которые они любят есть, против каждого человека.

Например: -

Jack, Apple.
Jack, Banana.
Jack, Orange.
Emma, Apple.
Bob, Melon.

Я хочу вставить строку сцените «банан» против каждого человека, это еще не так.Я уверен, что что-то упустил, так как когда я использую Not In, я получаю записи для Джека, Apple.Который затем добавил бы еще одну запись Banana, когда у него уже есть.

Cheers, Steve

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018
create table [dbo].SoTablename(
    [FirstColumn] [nvarchar](10),
    [SecondColumn] [nvarchar](10)
)
GO


insert into [dbo].SoTablename values ('Jack', 'apple')
insert into [dbo].SoTablename values ('Jack', 'banana')
insert into [dbo].SoTablename values ('Jack', 'orange')
insert into [dbo].SoTablename values ('Emma', 'apple')
insert into [dbo].SoTablename values ('Bob', 'banana')


Select * From SoTablename

enter image description here

;with temp as
    (select
    k.FirstColumn,
    case
        when exists (select * from dbo.SoTablename where FirstColumn = k.FirstColumn and SecondColumn = 'banana')
        then 1
    else
        0
    end as 'ExistsOrNot'
    from
        dbo.SoTablename k
    )
Insert Into dbo.SoTablename
select 
    FirstColumn, 'banana'
from temp
where existsornot = 0


Select * From SoTablename

enter image description here

0 голосов
/ 29 ноября 2018

Это будет работать для SQL Server как минимум:

Declare     @PersonFruit Table 
    (
        Person  varchar(50), 
        Fruit   varchar(50)
    ); 

Insert Into @PersonFruit Values('Jack', 'Apple')  
Insert Into @PersonFruit Values('Jack', 'Banana') 
Insert Into @PersonFruit Values('Jack', 'Orange')
Insert Into @PersonFruit Values('Emma', 'Apple')
Insert Into @PersonFruit Values('Bob', 'Melon') 

-- Insert Banana for persons who didn't already have it 
Insert Into @PersonFruit 
Select  Person, 'Banana'
From    @PersonFruit 
Where   Person Not In 
    (Select Person From @PersonFruit Where Fruit = 'Banana')
...