нуб SQL запрос
слишком много? мало?
closed
ну так выведи все таблицы *. отсортируй по этому каунтеру, возьми повторяющийся, выбери все только с этим каунтером и посмотри где ты что недоучел
Да не, оказалось запрос то верный) В одной из таблице немного не те значения были вставлены - надо будет на ней первичный ключ создать
на будущее. Используй join.
В чем его преимущество перед вышеуказанным запросом?... оно быстрее работает или в чем то другом?
Наглядность, скорость, поддержка и развитие разработчиком и все остальное читай на сайте майкрософта, если интересно.
MS тут причем? я на оркале прогаю
ну про оракл читай где нить еще.
А, ну да, на оракле конешно можно
Дополнительное удобство открывается с outer join'ом, он явно нагляднее нежели (+ да и full join плюсиком не изобразишь
SELECT banners_counter.*, banners.active, banners.id as banner_id
FROM banners, banner2user, banners_counter, banner2counter, banner2category
WHERE
banner2category.category_id=2 AND
banner2user.user_id=1 AND
banners_counter.id=banner2counter.counter_id AND
banner2counter.banner_id=banners.id AND
banner2category.banner_id=banners.id AND
banner2user.banner_id=banners.id
SELECT bc.*, b.active, b.id as banner_id
FROM banners b
INNER JOIN banner2category b2ca ON (b.id = b2ca.banner_id)
INNER JOIN banner2user b2u ON (b.id = b2u.banner_id)
INNER JOIN banner2counter b2co ON (b.id = b2co.banner_id)
INNER JOIN banners_counter bc ON (b2co.counter_id = bc.id)
WHERE
b2ca.category_id=2
AND b2u.user_id=1
Вот так это должно было выглядеть по-человечески. Не уверен, обязательно ли ораклу нужно упоминание INNER, но в любом случае — так он более гарантированно поймёт, как джоинить таблицы. А то ты своими AND'ами и крышу анализатору сорвать можешь. Не факт, конечно, но небольшие шансы у тебя есть.
"писать через inner join или в where - всё равно
а вот если left join, то в оракле вообще рекомендуется через where писать, а не left join"
"писать через inner join или в where - всё равноЭто было справедливо только для 9-ки.
а вот если left join, то в оракле вообще рекомендуется через where писать, а не left join"
мне не доводилось сталкиваться, но на скл.ру можно найти
а вот с ситуациями, когда с анси не фиксируется нормальный план выполнения я несколько раз встречался
а с плюсиками ок вроде всегда было
правда не так читаемо, это да
Оставить комментарий
freako
Походу в нем ошибка:SELECT banners_counter.*, banners.active, banners.id as banner_id
FROM banners, banner2user, banners_counter, banner2counter, banner2category
WHERE
banner2category.category_id=2 AND
banner2user.user_id=1 AND
banners_counter.id=banner2counter.counter_id AND
banner2counter.banner_id=banners.id AND
banner2category.banner_id=banners.id AND
banner2user.banner_id=banners.id
Надо: выбрать счетчики ( banners_counter) и ID,active баннера
для тех баннеров, у которых
user_id=1 и category_id=2
Связь категорий и баннеров в таблице banner2category
счетчиков и баннеров в таблице banner2counter
юзеров и баннеров banner2user
сами баннеры в banners
Синтаксически всё верно но выдаёт что то не то. не пойму , где то тут нужен видимо DISTINCT?