Форум → Сообщество → Профессиональная деятельность → Предлагаю работу → Требуется программист PHP, Москва, м. Каширская, от 50000 руб.
Требуется программист PHP, Москва, м. Каширская, от 50000 руб.
Страницы: ← Предыдущая страница →
-
-
12 апреля 2012 г. 9:25, спустя 8 часов 20 минут 41 секунду
Напишите запрос который бы по имени менеджера выводил бы названия городов, в которых менеджер не осуществил ни одной сделки.
весь фокус задания в этом "не" )))
начнем от обратного:
шаг 1
SELECT c.`name`
FROM
`cross` AS x INNER JOIN
`cities` AS c ON c.`id` = x.`city_id` INNER JOIN
`managers` AS m ON m.`id` = x.`manager_id`
WHERE
m.login = 'mary'
выведет все города, где Мэри имела успех
шаг 2. неуспех. есть такая операция NOT IN
SELECT c.`name`
FROM
`cities` AS c
WHERE
c.`id` NOT IN (
SELECT c.`id`
FROM
`cross` AS x INNER JOIN
`cities` AS c ON c.`id` = x.`city_id` INNER JOIN
`managers` AS m ON m.`id` = x.`manager_id`
WHERE
m.login = 'mary')
bingo! выведутся те города, которые не попали в предыдущий список
шаг 3 (необязательный). перенесем подзапрос во фразу FROM. просто синтаксический сахар
SELECT c.`name`
FROM
`cities` AS c LEFT JOIN
( SELECT c.`id`
FROM
`cross` AS x INNER JOIN
`cities` AS c ON c.`id` = x.`city_id` INNER JOIN
`managers` AS m ON m.`id` = x.`manager_id`
WHERE
m.login = 'mary' ) AS c2 ON c2.`id` = c.`id`
WHERE
c2.`id` IS NULL
PROFIT!ιιlllιlllι унц-унц -
12 апреля 2012 г. 18:43, спустя 9 часов 17 минут 27 секунд
Tekuto, нет, ты хоть бы сам проверил
Ну да, не проверял.
Так твой вопрос по поводу одного SELECT остался без ответа? -
12 апреля 2012 г. 19:35, спустя 52 минуты 27 секунд
artoodetoo,можно без двух селект. задание фигня.
…………. PROFIT!
чё то ты не особо справился ))Так твой вопрос по поводу одного SELECT остался без ответа?
Похоже что так )) -
12 апреля 2012 г. 20:31, спустя 56 минут 15 секунд
kostyl, ну это ты хуйню придумал про один SELECT ))) нечего подзапросов стесняться. по сути джойны ничем принципиально от подзапросов не отличаются
вычитание самая неудобная операция в реляционной алгебре. так что вот так воту меня была версия с лишним двойном по cities и без подзапроса. но она выдает хлам в частном случае - если менеджер везде наследил. поэтому не привожу
вот есть некоторое подобие, правда параметром не имя менеджера, а его id, что на практике несерьезное ограничение :)
SELECT c.`name`
FROM
`cities` AS c LEFT JOIN
`cross` AS x ON c.`id` = x.`city_id`AND x.`manager_id`=2
GROUP BY c.`name`
HAVING count(*) <> count(x.city_id)ιιlllιlllι унц-унц -
-
13 апреля 2012 г. 7:02, спустя 10 часов 47 минут 8 секунд
см. выше.
данные и все запросы здесь
update: перезалил архивιιlllιlllι унц-унц -
-
-
13 апреля 2012 г. 0:01, спустя 25 минут
Абырвалг, точно, значит я старею…Select c.city_name, m.*, cr.* from cities c
left join `cross` cr on cr.city_id = c.city_id
left join managers m on m.manager_id = cr.manager_id
where cr.manager_id is NULL OR (m.manager_name = 'ololo' AND cr.count = 0) -
13 апреля 2012 г. 7:05, спустя 7 часов 3 минуты 36 секунд
kostyl, что-то ты замудрил с условиями. оно нерабочее
вот рабочий запрос без подзапросов, как ты хотел:SELECT c.`name`
FROM
`cross` AS x INNER JOIN
`managers` AS m ON m.`id`= x.`manager_id` AND m.`login` = 'mary' RIGHT JOIN
`cities` AS c ON c.`id` = x.`city_id`
WHERE x.num_deals IS NULL
архив выше перезалил. мне понравилось )))ιιlllιlllι унц-унц -
14 апреля 2012 г. 13:24, спустя 1 день 6 часов 19 минут
artoodetoo, да, я вообще какую то хуйню написал )))
Ты молодец, как раз тут RIGHT JOIN рулит.
Я еще рассматривал условие, когда есть записть в х с количеством ноль, так что полное решение, будет как у тебя + фигня
SELECT c.`name`
FROM
`cross` AS x INNER JOIN
`managers` AS m ON m.`id`= x.`manager_id` AND m.`login` = 'mary' RIGHT JOIN
`cities` AS c ON c.`id` = x.`city_id`
WHERE x.num_deals IS NULL OR x.cc = 0
Страницы: ← Предыдущая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!