Tutaj podobnie, ale nie tak wielu deweloperów i nie tak stary kod. Używam nowszych rzeczy, starsi ludzie używają starszego stylu, ale oboje wiemy, co próbuje zrobić ten drugi.
Osobiście powiedziałbym, że wybierz dowolny styl, który jest łatwiejszy w użyciu dla indywidualnego programisty. O ile nie uruchomisz testów porównawczych i nie dowiesz się, że jeden jest szybszy od drugiego (na przykład różnica jest wystarczająca, aby była znacząca), a zarówno nowi, jak i starsi mogą czytać i rozumieć zapytania, które widzą, nie ma powodu, aby je zmieniać.
Jednak moim osobistym głosem byłoby pozostawienie starych rzeczy bez zmian i napisanie nowych zapytań przy użyciu nowszej składni, jak przy użyciu JOIN
s i USING
i ON
itp. są o wiele łatwiejsze do odczytania i wiedzą, co się dzieje, niż posiadanie kilku AND x.col = y.col AND z.col = a.col
w WHERE
sekcja.
To, a nowi faceci prawdopodobnie będą w pobliżu dłużej, więc w końcu dojdą do celu...
Dodatkowy przykład
Nie wiem jak reszta z was, ale nie chciałbym próbować wymyślić czegoś takiego (lub napisać to) używając starego stylu łączenia:
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