Перенос идентифицированных данных WDR из new_table в old_table с помощью View

Вход : Select * from new_table

Код название S001 WDR S002 WDR S005 АКС
Select * from Old_table
Код название S001 WDR S003 WDR S004 оператор мобильной связи

Кеш здесь, мы не можем изменить данные таблицы new_table/old_table, например

Https://stackoverflow.com/questions/13237623/copy-data-into-another-table.

Нам нужно перенести данные WDR в новую таблицу.

Output результата жду

Select * from Dummy

код название db_name S001 WDR Новый S002 WDR Новый S003 WDR старый S004 оператор мобильной связи старый

Так как это миграция, то идентифицированные данные WDR. В этом случае мы должны спроектировать/изменить приведенный ниже код таким образом, чтобы он принимал существующие данные из текущей Old_table + перенесенные данные из new_table.


code which I am trying 

    create View Dummy
    As
    with input As
    (
    Select Distinct Code     =ne.Code,
                    name     =ne.name
                    db_name  =CAST('New' as char(3))
    from new_table As ne 
    where name like '%WDR%'
    
    Union All 
    
    select Distinct code      =ol.Code,
                    name      =ol.name
                    db_name  =CAST('old' as char(3))
    from old_table As ol
    ),
    data As 
    (
    select code=input.code,
           name=input.name,
           ranking=Row_Number() over(partition by code order by db_name DESC)
    from input
    )
    Select code            =data.code,
           name            =data.name
           db_name         =data.db_name  
    from data
    where data.ranking=1;

please amended the code.
 

ИДТИ? sql-сервер вы правильно пометили?

P.Salmon 18.11.2022 12:00

@P.Salmon есть только код MySQL, но я все еще получаю сообщение об ошибке отступа, когда пытаюсь добавить свой код.

Mohit 18.11.2022 12:02

В этом случае бросьте GO.

P.Salmon 18.11.2022 12:02

@P.Salmon нет проблем, мы можем бросить GO

Mohit 18.11.2022 12:03

@P.Salmon Я добавил код, который я пытаюсь использовать в самом вопросе.

Mohit 18.11.2022 12:15

Я озадачен, почему вы решили, что представление будет здесь полезным. Вам нужна вставка..выбор, за которой следует удаление (как отдельные операторы) или, возможно, удаление старого с триггером для нажатия удаленного на новый.

P.Salmon 18.11.2022 12:26

@P.Salmon наши требования таковы, поэтому мы должны изменить существующее представление, чтобы прочитать данные.

Mohit 18.11.2022 12:37

Представление не может переносить данные, оно может только представить их, поэтому вы никогда не сможете получить 3 строки в таблице a и 1 в таблице b, используя этот метод, или вопрос представлен неправильно.

P.Salmon 18.11.2022 12:43

Давайте продолжим обсуждение в чате.

Mohit 18.11.2022 13:05

Я был немного озадачен желаемым результатом, но теперь, когда вы его исправили, я полагаю, вам нужно следующее: Для каждого кода вам нужна одна запись в таблице результатов. Желательно из новой таблицы, иначе из старой таблицы. Если код не соответствует шаблону Snnn, вам нужен новый номер S для него. Правильный?

Thorsten Kettner 21.11.2022 07:03

@ThorstenKettner да, вы правы, за исключением того, что шаблон соответствия - WDR,

Mohit 21.11.2022 07:07

Ах хорошо. Да, вы хотите только WDR из новой таблицы. Ваш запрос уже очень близок к решению, кажется. Только то, что ваш запрос ошибочно предпочитает старый новому и не изменяет коды, которые не соответствуют Snnn. Да?

Thorsten Kettner 21.11.2022 07:14

@ThorstenKettner Я отредактировал ввод для лучшего понимания, взяв запись из new_table, только если «WDR» присутствует в столбце «Имя» и запись в таблице результатов

Mohit 21.11.2022 07:15

Хм, хорошо. Теперь нет никакого изменения кодекса больше. Вы просто берете все строки WDR из new_table плюс все строки из old_table, код которых не существует в new_table. Если вы исправите синтаксические ошибки в своем запросе, вам нужно всего лишь изменить order by db_name DESC на order by db_name, чтобы получить этот результат. Но вы можете добиться того же с гораздо более простым запросом. Пожалуйста, смотрите мой ответ по этому поводу.

Thorsten Kettner 21.11.2022 07:57
Как настроить Tailwind CSS с React.js и Next.js?
Как настроить Tailwind CSS с React.js и Next.js?
Tailwind CSS - единственный фреймворк, который, как я убедился, масштабируется в больших командах. Он легко настраивается, адаптируется к любому...
LeetCode запись решения 2536. Увеличение подматриц на единицу
LeetCode запись решения 2536. Увеличение подматриц на единицу
Увеличение подматриц на единицу - LeetCode
Переключение светлых/темных тем
Переключение светлых/темных тем
В Microsoft Training - Guided Project - Build a simple website with web pages, CSS files and JavaScript files, мы объясняем, как CSS можно...
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel могут быть немного сложными, но с помощью Eloquent ORM и его моделей мы можем сделать это с легкостью. В этой...
В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Карта дорог Беладжар PHP Laravel
Карта дорог Беладжар PHP Laravel
Laravel - это PHP-фреймворк, разработанный для облегчения разработки веб-приложений. Laravel предоставляет различные функции, упрощающие разработку...
0
14
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашем запросе отсутствуют только несколько запятых, столбец db_name отсутствует в ваших данных, и ORDER BY db_name DESC там, где он должен быть ORDER BY db_name ASC.

Кроме того, DISTINCT, вероятно, не нужен в вашем запросе, и нет необходимости давать столбцу псевдоним, соответствующий имени столбца.

Что осталось

create view dummy as
with input as
(
  select
    code,
    name,
    'new' as db_name
  from new_table
  where name like '%WDR%'

  union all 

  select
    code,
    name,
    'old' as db_name
  from old_table
),
data As 
(
  select
    code,
    name,
    db_name,
    row_number() over(partition by code order by db_name) as ranking
  from input
)
select 
  code,
  name,
  db_name  
from data
where data.ranking = 1;

Что также можно записать как

create view dummy as
select code, name, 'new' as db_name
from new_table
where name like '%WDR%'
union all
select code, name, 'old' as db_name
from old_table
where code not in (select code from new_table);

Демо: https://dbfiddle.uk/7C4g3V9_

Я хочу всю запись старой таблицы + WDR из новой _table. В этом ответе в наборе результатов отсутствует строка кода S004.

Mohit 21.11.2022 08:13

Нет, не пропало. Пожалуйста, посмотрите демонстрацию, на которую я ссылаюсь в своем ответе.

Thorsten Kettner 21.11.2022 08:23

Другие вопросы по теме