【问题标题】:MySQL UPDATE with SELECT GREATEST (date)MySQL UPDATE with SELECT GREATEST (date)
【发布时间】:2020-07-20 16:50:05
【问题描述】:

我有这个代码:

UPDATE fizmod_csat_szolgaj
SET
    erv_vege = TO_DATE('2020-JAN.-01', 'YYYY-MON.-DD')
WHERE
    fizmod_csat_szolgaj_id IN (
        SELECT
            fmcsatszolg.fizmod_csat_szolgaj_id
        FROM
            szolg_ajanlat_tipus   szolgajtip
            INNER JOIN fizmod_csat_szolgaj   fmcsatszolg ON ( fmcsatszolg.szolgaltatasi_ajanlat_tipus_id = szolgajtip.szolgaltatasi_ajanlat_tipus_id )
            INNER JOIN apex_changeset ac ON ( ac.CHANGESET_ID = szolgajtip.CHANGESET_ID AND ac.status_es = 'CHANGESET_STATUS#ELES' )
        WHERE
                greatest((
                SELECT
                    MAX(erv.erv_vege)
                FROM
                    ervenyesseg erv
                WHERE
                    erv.szolgaltatasi_ajanlat_tipus_id = szolgajtip.szolgaltatasi_ajanlat_tipus_id
            ),(
                SELECT
                    MAX(erv.ertekesith_vege_d)
                FROM
                    ervenyesseg erv
                WHERE
                    erv.szolgaltatasi_ajanlat_tipus_id = szolgajtip.szolgaltatasi_ajanlat_tipus_id
            )) < '2020-JAN.  -01'
    )
    AND engedelyezo_jel = '1';

在 pastebin 上:https://pastebin.com/xpVJyYC9

我想更改 SET 语句,用 WHERE 子句中的日期更新 erv_vege。 所以,

greatest((
                SELECT
                    MAX(erv.erv_vege)
                FROM
                    ervenyesseg erv
                WHERE
                    erv.szolgaltatasi_ajanlat_tipus_id = szolgajtip.szolgaltatasi_ajanlat_tipus_id
            ),(
                SELECT
                    MAX(erv.ertekesith_vege_d)
                FROM
                    ervenyesseg erv
                WHERE
                    erv.szolgaltatasi_ajanlat_tipus_id = szolgajtip.szolgaltatasi_ajanlat_tipus_id
            ))

将返回一个日期(例如 2019.JAN.02),我想用这个日期更新 erv_vege。

SET erv_vege = TO_DATE( the date from greatest(...), 'YYYY-MON.-DD')

我试过了

SET erv_vege = SELECT to_date(GREATEST( 
    ( SELECT MAX(erv.erv_vege) FROM ERVENYESSEG erv WHERE erv.szolgaltatasi_ajanlat_tipus_id = szolgajtip.szolgaltatasi_ajanlat_tipus_id ), 
    ( SELECT MAX(erv.ERTEKESITH_VEGE_D) FROM ERVENYESSEG erv WHERE erv.szolgaltatasi_ajanlat_tipus_id = szolgajtip.szolgaltatasi_ajanlat_tipus_id )  
), 'YYYY-MON.-DD')
FROM ERVENYESSEG erv, SZOLG_AJANLAT_TIPUS szolgajtip ...

但它没有用。我该如何解决这个问题?

【问题讨论】:

    标签: mysql sql plsql sql-update where-clause


    【解决方案1】:

    这应该适用于SET:

    SET erv_vege = (SELECT (SELECT GREATEST(MAX(erv.erv_vege), MAX(erv.ertekesith_vege_d))
                            FROM ervenyesseg erv
                            WHERE erv.szolgaltatasi_ajanlat_tipus_id = sat.szolgaltatasi_ajanlat_tipus_id
                           )
                    FROM szolg_ajanlat_tipus sat JOIN
                         fizmod_csat_szolgaj fcs
                         ON fcs.szolgaltatasi_ajanlat_tipus_id = sat.szolgaltatasi_ajanlat_tipus_id JOIN
                         apex_changeset ac
                         ON ac.CHANGESET_ID = sat.CHANGESET_ID AND
                            ac.status_es = 'CHANGESET_STATUS#ELES'
                   )
    

    我修改了查询以简化逻辑并引入更短的表别名。

    【讨论】:

      猜你喜欢
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      • 2013-10-25
      • 2014-03-10
      相关资源
      最近更新 更多