SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 28.01.2013 20:27:46

Grider
Участник
Зарегистрирован: 28.01.2013
Сообщений: 10

Выборка из трех таблиц.

Помогите с запросом. Уже два дня сижу весь форум перерыл и интернет. Не могу составить.
Есть три таблицы.

-user-
   user_id
   parent_id
   name

-schet-
    id
    user_id


-platez-
    id
    schet_id
    summa

Запрос, нужно выбрать из таблицы Usera где parent_id = 1, затем получиться что то вроде этого:
  user_id   parent_id  name
    5             1         Ivan
    6             1         Petr
    8             1         Dima

Затем в таблице Schet находим пользователя с user_id = 5,6,8 к примеру:
  id   user_id
  11      5
  22      5
  33      5
  44      6
  55      8

Затем передвигаемся в таблицу -platez-
  id  schet_id  summa
  1       11          50
  2       22          50
  3       33          10
  4       44           0
  5       55          20

Нужно написать одним запросом, так что бы получилось

ID   Parent_ID    Имя      Сумма_Платежа

5       1             Иван            110
6       1             Петр              0
8       1             Дима            20

Объяснил как смог. Помогите, никак не могу написать такой запрос. Не знаю как там одним запросом это сделать. Опыта и знаний не хватает.

Отредактированно Grider (28.01.2013 20:35:11)

Неактивен

 

#2 28.01.2013 20:35:39

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка из трех таблиц.

Grider написал:

Затем в таблице Schet находим пользователя с user_id = 5:
  id   user_id
  1      5
  2      5
  3      5

Затем передвигаемся в таблицу -platez-
  id  schet_id  summa
  1       1          50
  2       1          60

Почему в таблице Schet из трех значений id выбрана именно единица?

Неактивен

 

#3 28.01.2013 20:46:17

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка из трех таблиц.

SELECT u.user_id, u.parent_id, u.name, sum(p.summa) FROM `user` u JOIN Schet s ON user_id=s.id JOIN platez p ON s.id=p.schet_id where parent_id=1 GROUP BY 1;

Неактивен

 

#4 28.01.2013 20:49:01

Grider
Участник
Зарегистрирован: 28.01.2013
Сообщений: 10

Re: Выборка из трех таблиц.

Вроде исправил

Неактивен

 

#5 28.01.2013 20:51:58

Grider
Участник
Зарегистрирован: 28.01.2013
Сообщений: 10

Re: Выборка из трех таблиц.

SELECT u.user_id, u.parent_id, u.name, sum(p.summa) FROM `user` u JOIN Schet s ON user_id=s.id JOIN platez p ON s.id=p.schet_id where parent_id=1 GROUP BY 1;

Извините после  `user` u, Schet s, JOIN platez p, что эти буквы значат

Отредактированно Grider (28.01.2013 20:53:53)

Неактивен

 

#6 28.01.2013 20:57:04

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка из трех таблиц.

алиасы, чтобы каждый раз не писать длинное название таблицы.
В данном случае опущено необязательное ключевое слово as. Полная форма - `user` as u,

Неактивен

 

#7 28.01.2013 20:59:08

Grider
Участник
Зарегистрирован: 28.01.2013
Сообщений: 10

Re: Выборка из трех таблиц.

Спасибо Вам, щас буду пробывать. Вы просто гуру SQL.



Вот так будет если написать полным кодом?

SELECT USER.user_id, USER.parent_id, USER.name, sum(PLATEZ.summa) FROM `user` as USER JOIN SСHET as ON user_id=SСHET.id JOIN PLATEZ as ON SСHET.id=PLATEZ.schet_id where parent_id=1 GROUP BY 1;

Отредактированно Grider (28.01.2013 21:06:49)

Неактивен

 

#8 28.01.2013 21:09:48

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка из трех таблиц.

Нет. Какой смысл в записи "`user` as USER"?
Запись "SСHET as " синтаксически неверна.

Неактивен

 

#9 28.01.2013 21:27:15

Grider
Участник
Зарегистрирован: 28.01.2013
Сообщений: 10

Re: Выборка из трех таблиц.

Без алиасов будет так?

SELECT USER.user_id, USER.parent_id, USER.name, sum(PLATEZ.summa) FROM `user` JOIN Schet  ON user_id=SСHET.id JOIN PLATEZ ON SСHET.id=PLATEZ.schet_id where parent_id=1 GROUP BY 1;

Неактивен

 

#10 28.01.2013 21:36:16

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка из трех таблиц.

Да, только user ключевое слово и его нужно брать в обратные кавычки.
А зачем в одном месте писать имя таблицы маленькими, а в другом большими буквами?

Неактивен

 

#11 28.01.2013 21:45:38

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка из трех таблиц.

Возможно phpMyadmin  чувствителен к регистру.

Неактивен

 

#12 28.01.2013 21:45:57

Grider
Участник
Зарегистрирован: 28.01.2013
Сообщений: 10

Re: Выборка из трех таблиц.

В phpMyadmin отправляю в базу, пишет #1054 - Unknown column 'SСHET.id' in 'on clause'

SELECT USER.user_id, USER.parent_id, USER.name, sum(PLATEZ.summa) FROM `user` JOIN Schet  ON user_id=SСHET.id JOIN PLATEZ ON SСHET.id=PLATEZ.schet_id where parent_id=1 GROUP BY 1;

Неактивен

 

#13 28.01.2013 21:52:42

Grider
Участник
Зарегистрирован: 28.01.2013
Сообщений: 10

Re: Выборка из трех таблиц.

Да, вы правы, phpMyadmin  чувствителен к регистру.

Неактивен

 

#14 29.01.2013 09:24:12

Grider
Участник
Зарегистрирован: 28.01.2013
Сообщений: 10

Re: Выборка из трех таблиц.

vasya добрый день.
Спасибо, я разобрался конечный у меня получился вот так:

SELECT user.id, user.parent_id, user.name, sum( platez.summ )
FROM `user`
JOIN schet ON schet.user_id = user.id
JOIN platez ON platez.schet_id = schet.id
WHERE user.parent_id =1

Отредактированно Grider (29.01.2013 09:37:08)

Неактивен

 

#15 29.01.2013 12:50:57

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка из трех таблиц.

Думаю не ошибусь, если скажу, что он работает не правильно wink

Неактивен

 

#16 30.01.2013 08:33:30

Grider
Участник
Зарегистрирован: 28.01.2013
Сообщений: 10

Re: Выборка из трех таблиц.

Возвращает то что я хотел. Вроде все нормально

Неактивен

 

#17 30.01.2013 10:24:23

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка из трех таблиц.

Вы хотели получить три строки:

5       1             Иван            110
6       1             Петр              0
8       1             Дима            20

А ваш запрос

SELECT user.id, user.parent_id, user.name, sum( platez.summ )
FROM `user`
JOIN schet ON schet.user_id = user.id
JOIN platez ON platez.schet_id = schet.id
WHERE user.parent_id =1

вернет только одну с суммой в 130.

Неактивен

 

#18 31.01.2013 17:30:51

Yabadabadoo
Участник
Зарегистрирован: 31.01.2013
Сообщений: 1

Re: Выборка из трех таблиц.

Он же не группирует по user.parent_id, или я ошибаюсь?

Неактивен

 

#19 31.01.2013 18:23:38

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка из трех таблиц.

Нет. Он считает сумму ( sum( platez.summ )), а для всех остальных полей берет случайное значение. См FAQ №16

Неактивен

 

#20 01.02.2013 13:13:53

Grider
Участник
Зарегистрирован: 28.01.2013
Сообщений: 10

Re: Выборка из трех таблиц.

Не знаю, не знаю. Но он возвращает мне именно так:

5       1             Иван            110
6       1             Петр              0
8       1             Дима            20

Все равно спасибо vasya.

Неактивен

 

Board footer

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