sql >> データベース >  >> RDS >> Oracle

Oracle構文-古いものと新しいもののどちらかを選択する必要がありますか?

    ここでも同様ですが、開発者の数は少なく、コードの古さも劣ります。私は新しいものを使用しており、年配の人は古いスタイルを使用していますが、私たちはお互いが何をしようとしているのかを知っています。

    個人的には、個々の開発者が使いやすいスタイルを選ぶと思います。ベンチマークを実行して、一方が他方よりも高速であり(たとえば、重要な違いが十分にある)、新旧両方が表示されたクエリを読み取って理解できることがわかった場合を除いて、ベンチマークを変更する理由はありません。

    ただし、私の個人的な投票は、古いものをそのままにして、JOINを使用するように、新しい構文を使用して新しいクエリを作成することです。 sおよびUSING およびON などははるかに読みやすく、何が起こっているのかを知っているので、AND x.col = y.col AND z.col = a.colがたくさんあります。 WHERE セクション。

    それと、新しい人はおそらくもっと長くなるだろう、それで彼らは最終的に彼らの道を進むだろう...

    追加された例

    あなたの残りの部分についてはわかりませんが、古いスタイルの参加を使用して、このようなものを考え出す(またはこれを書く)必要はありません:

    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. Oracle PL/SQLからのWebサービスの利用

    2. MariaDBでのCOERCIBILITY()の仕組み

    3. SQL:NULL値のAVG

    4. 特定のタグがない投稿を選択してください