Извините, я в значительной степени нуб SQL. Это должно работать в MSFT SQL, Oracle, а также Sybase. В следующем фрагменте мне нужно изменить inner join
между IJ
и KL
на IJ.PO_id = KL.PO_id
на left join
также на IJ.PO_id = KL.PO_id
. Итак, я считаю, что я должен заново учесть это. Ну, неявные объединения не самые читаемые, по крайней мере, в глазах моего сотрудника. Думаю, я соглашусь, пока не разовью свой вкус. Извините, я исказил имена таблиц и полей на всякий случай.
/* @IJ_id is an input stored proc patrameter. */
from AB,
CD,
EF,
GH,
IJ,
KL
where
EF.EF_id = IJ.EF_id and
IJ.EF_id = AB.EF_id and
EF.ZY_id = IJ.ZY_id and
IJ.ZY_id = AB.ZY_id and
IJ.IJ_id = AB.IJ_id and
IJ.IJ_id = @IJ_id and
EF.XW_id = GH.GH_id and
AB.VU_code = CD.VU_code and
IJ.TS > 0 and
IJ.RQ = 0 and
EF.RQ = 0 and
AB.RQ = 0 and
IJ.PO_id = KL.PO_id;
Теперь моя трудность заключается в том, что в предложении where много чего происходит. Вещи, которые не похожи на a.b = c.d
, останутся в предложении where, но не все вещи, которые выглядят как a.b = c.d
, легко преобразовать в явное соединение. Трудная часть состоит в том, что в идеале условия должны быть между соседями - AB+CD
, CD+EF
, EF+GH
, GH+IJ
, IJ+KL
, но они сейчас не настолько организованы. Я мог бы переупорядочить некоторые, но в конечном итоге я не хочу забывать свою цель: я хочу, чтобы новый запрос был не медленнее, и я хочу, чтобы новый запрос был не менее читабельным. Кажется, мне лучше взломать только ту часть, которую мне нужно изменить, и оставить ее в основном той же самой. Я не уверен, смогу ли я это сделать.
Если вы поняли мои намерения, предложите лучший запрос. если нет, то скажите, пожалуйста, как я могу улучшить вопрос. Спасибо.