sql >> Databáze >  >> RDS >> Oracle

Syntaxe Oracle – měli bychom si vybrat mezi starým a novým?

Tady podobná věc, ale ne tolik vývojářů a ne tak starý kód. Já používám novější věci, starší kluci používají starší styl, ale oba víme, o co se ten druhý snaží.

Osobně bych řekl, že jít s jakýmkoli stylem, který je pro jednotlivého vývojáře jednodušší. Dokud nespustíte benchmarky a nezjistíte, že jeden je rychlejší než druhý (což je dostatečný rozdíl na to, aby byl významný), a jak noví, tak starší dokážou číst a porozumět dotazům, které vidí, není důvod je měnit.

Můj osobní hlas by však byl ponechat staré věci tak, jak jsou, a psát nové dotazy pomocí novější syntaxe, jako pomocí JOIN s a USING a ON atd. jsou mnohem snáze čitelné a víte, co se děje, pak máte spoustu AND x.col = y.col AND z.col = a.col v WHERE sekce.

To a noví kluci tu pravděpodobně budou déle, takže si nakonec projdou...

Přidaný příklad

Nevím jak vy ostatní, ale nerad bych se musel snažit něco takového vymyslet (nebo napsat toto) pomocí starého stylu spojování:

SELECT DISTINCT product_zone_map_id, zh.name_english, zh.name_french, zone_id, ad.attribute_value_english AS bullprep_region_type,
        product_zone_type_id, ad.attribute_value_english, language_english, product_code, office_code,
        (
            SELECT attribute_value_english
            FROM presentation p JOIN presentation_details ad USING(presentation_id)
            WHERE dimension_id = 4
              AND object_id = product_zone_map_id
              AND attribute_type = 'BULLPREP PARENT ID'
              AND p.usage_start_date <= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss')
              AND (p.usage_end_date >= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss') OR p.usage_end_date IS NULL)
        ) AS bullprep_parent_id,
        (
            SELECT attribute_value_english
            FROM presentation p JOIN presentation_details ad USING(presentation_id)
            WHERE dimension_id = 4
              AND object_id = product_zone_map_id
              AND attribute_type = 'BULLPREP GROUP ID'
              AND p.usage_start_date <= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss')
              AND (p.usage_end_date >= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss') OR p.usage_end_date IS NULL)
        ) AS bullprep_group_id, product_zone_seq
FROM zone z JOIN zone_history zh ON(z.zone_id = zh.zone_id)
     JOIN product_zone_map pzm ON(z.zone_id = pzm.zone_id)
     JOIN product USING(product_id)
     JOIN product_history ph USING(product_id)
     JOIN language_reference USING(language_id)
     LEFT OUTER JOIN product_zone_attribute_details pzad USING(product_zone_map_id)
     LEFT OUTER JOIN attribute_details ad USING(attribute_id)
     JOIN zone_geocode_map USING(zone_id)
     JOIN geocode USING(geocode_id)
WHERE zh.usage_start_date <= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss')
  AND (zh.usage_end_date >= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss') OR zh.usage_end_date IS NULL)
  AND pzm.usage_start_date <= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss')
  AND (pzm.usage_end_date >= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss') OR pzm.usage_end_date IS NULL)
  AND (attribute_type = 'BULLPREP REGION TYPE' OR attribute_type IS NULL)
  AND product_id = 2075
ORDER BY product_zone_seq



  1. Změny v my.cnf se neprojeví (Ubuntu 16.04, mysql 5.6)

  2. Konfigurace transakční replikace SQL Server

  3. Escape znaku escape nefunguje – SQL LIKE Operator

  4. Křížový dotaz PostgreSQL