Как заставить SQL Server СОДЕРЖАТЬ использовать справочную таблицу - PullRequest
1 голос
/ 25 октября 2019

Мне нужно обновить таблицу с FULLTEXT INDEX в столбце Plants_Hystory.

SELECT Plants_Hystory, Species, Colour 
FROM Plants   

UPDATE Plants
SET Colour = 'White'
WHERE CONTAINS(Plants_Hystory, 'Anthemis punctata')

'Anthemis punctata' - это латинское название растения. У меня очень длинный список растительных латинских имен, которые нужно использовать для сканирования столбца Plants_Hystory, и, если он есть, обновите столбец с именем Colour.

Можно ли сделать CONTAINS для ссылки на другую таблицу, содержащуювсе растительные латинские имена (select Names from Plant_Latin_Names)?

Я знаю, что приведенный ниже скрипт не сработает, он просто даст вам представление о том, что я имею в виду:

UPDATE Plants
SET Colour = 'White'
WHERE CONTAINS(Plants_Hystory,'select Names from Plant_Latin_Names')

Спасибо!

1 Ответ

0 голосов
/ 25 октября 2019

Вы можете сделать обновление, установить, как показано ниже.

update
    Plants
set
    Colour = PLN.Colour
from
    Plants as P
    join Plant_Latin_Names as PLN
        on P.Plants_Hystory = PLN.Name

Теперь я не знаю, как выглядят ваши таблицы, так что вот мое полное тестирование и результаты.

create table #TempPlantNames
(
    Name varchar(50) not null,
    Color varchar(50) not null
)

insert into 
    #TempPlantNames
values
    ('Anthemis punctata', 'White'),
    ('Anthemis punctato', 'Black')

create table #TempPlants
(
    Hystory varchar(50) not null,
    Species varchar(50) not null,
    Colour varchar(50) not null
)

insert into #TempPlants
values 
    ('Anthemis punctata', 'Flower', 'unknown'),
    ('Anthemis punctato', 'Flower', 'unknown')

select
    * 
from
    #TempPlants

update
    #TempPlants
set
    [Colour] = tPN.Color
from
    #TempPlantNames as tPN
    join #TempPlants as tP
        on tPN.Name = tP.Hystory

select
    * 
from
    #TempPlants

drop table #TempPlantNames
drop table #TempPlants

До

    Hystory             Species Colour
    Anthemis punctata   Flower  unknown
    Anthemis punctato   Flower  unknown 

После

    Hystory             Species Colour
    Anthemis punctata   Flower  White
    Anthemis punctato   Flower  Black

Обновление

Если нет прямой связи между Plants и Plant_Latin_Names, вы можетеиспользуйте CHARINDEX для сопоставления таблиц (ниже), но если между двумя таблицами нет совпадения 1: 1 (несколько латинских названий применяются к одному растению или наоборот), у вас проблемы. Я бы проверил это много, прежде чем использовать его, чтобы убедиться, что вы не испортили некоторые данные. Может быть, вы можете добавить еще одно сравнение между двумя другими столбцами этих таблиц.

update
    #TempPlants
set
    [Colour] = tPN.Color
from
    #TempPlantNames as tPN
    join #TempPlants as tP
        on charindex(tP.Hystory, tPN.Name) > 0 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...