Запрос с UNION и JOIN

GrayMaster

Новичок
Запрос с UNION и JOIN

Есть такой запрос:
PHP:
SELECT `affilates`.`id` AS `aff`, '0' AS `saff` FROM `affilates`
UNION
SELECT `sub_affilates`.`affid` AS `aff`, `sub_affilates`.`id` AS `saff` FROM `sub_affilates`
LEFT JOIN `stats_hours` ON
`stats_hours`.`aff`=[b]`aff`[/b] AND
`stats_hours`.`saff`=[b]`saff`[/b] AND
`stats_hours`.`date`='2006-05-05'
WHERE `stats_hours`.`aff` IS NULL
Выбираю из 2-х табличек данные в 2 поля - `aff` и `saff`.
Затем неполучается сделать LEFT JOIN по этим самомым полям `aff` и `saff`. Вопрос - почему ?
 

zerkms

TDD infected
Команда форума
по отдельности каждый из запросов работает?
заключи их в скобки
 

.des.

Поставил пиво кому надо ;-)
неполучается это как?
Код:
ERROR MMM (NNN): Не получается
 

GrayMaster

Новичок
Да работает.
Скобки - неполучается...
Работает так вот у меня:
PHP:
SELECT `affilates`.`id` AS `aff`, '0' AS `saff` FROM `affilates`
                LEFT JOIN `stats_hours` ON
                `stats_hours`.`aff` = `affilates`.`id` AND
                `stats_hours`.`saff` = `saff` AND
                `stats_hours`.`date` = '2006-05-05'
                WHERE
                `stats_hours`.`aff` IS NULL
                UNION
                SELECT `sub_affilates`.`affid` AS `aff`, `sub_affilates`.`id` AS `saff` FROM `sub_affilates`
                LEFT JOIN `stats_hours` ON
                `stats_hours`.`aff` = `sub_affilates`.`affid` AND
                `stats_hours`.`saff` = `sub_affilates`.`id` AND
                `stats_hours`.`date` = '2006-05-05'
                WHERE
                `stats_hours`.`aff` IS NULL
Но разве нельзя сначала выполнить 2 SELECT'а, а затем к ним делать LEFT JOIN ?

-~{}~ 05.05.06 11:54:

неполучается это как?
так, что присоединение не происхдит по этим самым полученным `aff` и `saff`.
 

voituk

прозревший
GrayMaster
Ты можешь ответить что значит твое "неполучается"?

Вроде должно работать так, хотя я не пробовал:
[sql]
(
SELECT `affilates`.`id` AS `aff`, '0' AS `saff` FROM `affilates`
LEFT JOIN `stats_hours` ON
`stats_hours`.`aff` = `affilates`.`id` AND
`stats_hours`.`saff` = `saff` AND
`stats_hours`.`date` = '2006-05-05'
WHERE
`stats_hours`.`aff` IS NULL
UNION
SELECT `sub_affilates`.`affid` AS `aff`, `sub_affilates`.`id` AS `saff` FROM `sub_affilates`
) AS my_super_table
LEFT JOIN `stats_hours` ON
`stats_hours`.`aff` = `sub_affilates`.`affid` AND
`stats_hours`.`saff` = `sub_affilates`.`id` AND
`stats_hours`.`date` = '2006-05-05'
WHERE
`stats_hours`.`aff` IS NULL


[/sql]

-~{}~ 05.05.06 09:36:

Хотя нет, так не будет работать.

Вообщем попробуй полученную после UNION таблицу как-то обозвать, а с ней уже делай JOIN
 

Necromant

Новичок
Порядок полей одинаковый сделай и потеряна верхушка SELECT

[sql]
SELECT * FROM
(
(SELECT a, b,c FROM ***)
UNION
(SELECT a, b, c FROM ***)
) AS my_super_table
WHERE ***
[/sql]
 

voituk

прозревший
Necromant
Где-то так и имел ввиду.
Вот только о целесообразности такого монстроидального запроса я бы ещё поспорил.
 

GrayMaster

Новичок
Просто незнал как правильно брать в скобки :) Теперь знаю ! Спасибо :)

-~{}~ 05.05.06 17:43:

Вот только о целесообразности такого монстроидального запроса я бы ещё поспорил.
Запрос для анализа собранной информации, выполняется раз в 15 минут. Так что всё впорядке ;)
 

GrayMaster

Новичок
2voituk:
Угу, готов к этому... От этого никуда не деться к сожалению...
 

Necromant

Новичок
Хм, всегда можно разбить на под запросы и временной таблицей
 
Сверху