SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 17.12.2009 17:15:12

vfz4z
Участник
Зарегистрирован: 17.12.2009
Сообщений: 7

Объединение запросов. JOIN не могу сообразить

есть 2 запроса
SELECT users.id, SUM(objects.rating_2) as romantic
FROM users, stars, objects
WHERE stars.presenter_id = users.id
AND objects.id = stars.obj_id
and stars.user_id!=users.id
group by users.id

SELECT users.id, SUM(objects.rating_1) as charm
FROM users, stars, objects
WHERE stars.user_id = users.id
AND objects.id = stars.obj_id
and stars.presenter_id!=users.id
group by users.id

запросы из одних и тех же таблиц, но разные условия. надо их объединить чтоб получилось
id | romantic | charm
v.       val         val

+ ко всему должны присутствовать все пользователи, даже если у них сумма рейтингов NULL. дамп таблицы прилагаю


Прикрепленные файлы:
Attachment Icon Текстовый документ.txt, Размер: 26,206 байт, Скачано: 885

Неактивен

 

#2 17.12.2009 17:22:49

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Объединение запросов. JOIN не могу сообразить

SELECT a.id, romantic, charm
FROM (первый запрос) a
JOIN (второй запрос) b USING (id)

Неактивен

 

#3 17.12.2009 18:17:06

Dr. Neo
Участник
Зарегистрирован: 17.12.2009
Сообщений: 16

Re: Объединение запросов. JOIN не могу сообразить

Голова однако!

Неактивен

 

#4 17.12.2009 18:29:52

vfz4z
Участник
Зарегистрирован: 17.12.2009
Сообщений: 7

Re: Объединение запросов. JOIN не могу сообразить

запрос
SELECT a.id, romantic, charm
FROM (
SELECT users.id, SUM( objects.rating_2 ) AS romantic
FROM users, stars, objects
WHERE stars.presenter_id = users.id
AND objects.id = stars.obj_id
AND stars.user_id != users.id
GROUP BY users.id
)a
JOIN (
SELECT users.id, SUM( objects.rating_1 ) AS charm
FROM users, stars, objects
WHERE stars.user_id = users.id
AND objects.id = stars.obj_id
AND stars.presenter_id != users.id
GROUP BY users.id
)b
USING ( id )

ничего не возвращает... помогите пож. я join'ами ещё не пользовался никогда))

Отредактированно vfz4z (17.12.2009 18:30:50)

Неактивен

 

#5 17.12.2009 18:37:32

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Объединение запросов. JOIN не могу сообразить

Может, ошибку какую пишет?

Неактивен

 

#6 17.12.2009 20:32:41

vfz4z
Участник
Зарегистрирован: 17.12.2009
Сообщений: 7

Re: Объединение запросов. JOIN не могу сообразить

нет, запрос выполняет без ошибок. немного изменил значения в таблице stars, теперь результат есть. но работает всё немного неправильно.
id     romantic     charm
1     val              val
а неправильно работает судя по всему из=за того, что val=NULL не возвращиется в результате выполнения запроса. как надо изменить select'ы?

Неактивен

 

#7 18.12.2009 02:59:09

vfz4z
Участник
Зарегистрирован: 17.12.2009
Сообщений: 7

Re: Объединение запросов. JOIN не могу сообразить

цель запросов получить для каждого id из таблицы users 2 вот этих поля. А если одно их полей у пользователя =0 то строка не выводится, хотя 2 может и быть !=0

Неактивен

 

#8 18.12.2009 12:31:04

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Объединение запросов. JOIN не могу сообразить

Ну, тогда

SELECT u.id, (SELECT SUM( objects.rating_2 )
FROM stars, objects
WHERE stars.presenter_id = u.id
AND objects.id = stars.obj_id
AND stars.user_id != u.id) romantic, (...)
FROM users u;

Неактивен

 

#9 18.12.2009 16:39:41

vfz4z
Участник
Зарегистрирован: 17.12.2009
Сообщений: 7

Re: Объединение запросов. JOIN не могу сообразить

в итоге получилось
SELECT u.id, (

SELECT SUM( objects.rating_2 )
FROM stars, objects
WHERE stars.presenter_id = u.id
AND objects.id = stars.obj_id
AND stars.user_id != u.id
) AS romantic, (

SELECT SUM( objects.rating_1 )
FROM stars, objects
WHERE stars.user_id = u.id
AND objects.id = stars.obj_id
AND stars.presenter_id != u.id
) AS charm
FROM users u

работает отлично. paulus, огромное спасибо!!!

Неактивен

 

#10 18.12.2009 17:17:30

vfz4z
Участник
Зарегистрирован: 17.12.2009
Сообщений: 7

Re: Объединение запросов. JOIN не могу сообразить

а если немного усложнить задачу и 4 столбец должен быть суммой 2 и 3?

Неактивен

 

#11 18.12.2009 18:25:13

vfz4z
Участник
Зарегистрирован: 17.12.2009
Сообщений: 7

Re: Объединение запросов. JOIN не могу сообразить

SELECT u.id, (SELECT ifnull( SUM( objects.rating_2 ) , 0 )
FROM stars, objects
WHERE stars.presenter_id = u.id
AND objects.id = stars.obj_id
AND stars.user_id != u.id
) AS romantic, (SELECT ifnull( SUM( objects.rating_1 ) , 0 )
FROM stars, objects
WHERE stars.user_id = u.id
AND objects.id = stars.obj_id
AND stars.presenter_id != u.id
) AS charm, (SELECT ifnull( SUM( objects.rating_2 ) , 0 )
FROM stars, objects
WHERE stars.presenter_id = u.id
AND objects.id = stars.obj_id
AND stars.user_id != u.id
) + (SELECT ifnull( SUM( objects.rating_1 ) , 0 )
FROM stars, objects
WHERE stars.user_id = u.id
AND objects.id = stars.obj_id
AND stars.presenter_id != u.id
) as rate 
FROM users u понятно что работает, но однако это не самое изящное решение...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson