MySQL - запрос ОБНОВЛЕНИЯ, основанный на SELECT Query - PullRequest
437 голосов
/ 12 августа 2009

Мне нужно проверить (из той же таблицы), существует ли связь между двумя событиями на основе даты и времени.

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

Если первое событие завершится до второго события, я бы хотел связать их.

То, что я имею до сих пор:

SELECT name as name_A, date-time as end_DTS, id as id_A 
FROM tableA WHERE criteria = 1


SELECT name as name_B, date-time as start_DTS, id as id_B 
FROM tableA WHERE criteria = 2

Тогда я присоединяюсь к ним:

SELECT name_A, name_B, id_A, id_B, 
if(start_DTS > end_DTS,'VALID','') as validation_check
FROM tableA
LEFT JOIN tableB ON name_A = name_B

Могу ли я затем, основываясь на моем поле validation_check, выполнить запрос UPDATE с вложенным SELECT?

Ответы [ 12 ]

1 голос
/ 05 октября 2018

Проверьте с помощью запроса ниже.

обновление таблицы A A внутренняя таблица соединений B B на A.name_a = B.name_b установить validation_check = if (start_dts> end_dts, 'VALID', '')

1 голос
/ 11 мая 2018

У меня была проблема с дублирующимися записями в одной таблице. Ниже подходы работали для меня. Это также было защищено @ sibaz.

Наконец я решил это, используя следующие запросы:

  1. Запрос на выборку сохраняется во временной таблице

    IF OBJECT_ID(N'tempdb..#New_format_donor_temp', N'U') IS NOT NULL
        DROP TABLE #New_format_donor_temp;
    
    select *
    into #New_format_donor_temp
    from DONOR_EMPLOYMENTS
    where DONOR_ID IN (
      1, 2
    )
    
    -- Test New_format_donor_temp
    -- SELECT *
    -- FROM #New_format_donor_temp;
    
  2. В запрос на обновление включена временная таблица.

    UPDATE de
    SET STATUS_CD=de_new.STATUS_CD, STATUS_REASON_CD=de_new.STATUS_REASON_CD, TYPE_CD=de_new.TYPE_CD
    FROM DONOR_EMPLOYMENTS AS de
      INNER JOIN #New_format_donor_temp AS de_new ON de_new.EMP_NO = de.EMP_NO
    WHERE
      de.DONOR_ID IN (
        3, 4
    )
    

Я не очень разбираюсь в SQL, пожалуйста, посоветуйте какой-нибудь лучший подход, который вы знаете.

Приведенные выше запросы относятся к серверу MySql.

...