SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

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

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

Вы не зашли.

#1 15.12.2014 10:41:02

s435
Участник
Зарегистрирован: 15.12.2014
Сообщений: 9

Хитрый вопрос на склейку трех таблиц

Есть три таблицы:
mysql> SELECT * FROM names;
+----+--------------------+
| id | name               |
+----+--------------------+
|  1 | John                  |
|  2 | Anna                 |
+----+--------------------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM prices;
+----+------------------+
| id | price            |
+----+------------------+
|  1 | JAVA                 |
|  2 | PHP                  |
+----+------------------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM namesprice;
+-----+-----+------+
| uid | pid | val  |
+-----+-----+------+
|   1 |   2 | 1.01 10  |
|   1 |   1 | 1.0  3 |
+-----+-----+------+
2 rows in set (0.00 sec)

Реально ли получить такую выборку:
name             price         uid     pid     val
John               JAVA            1     1     1
John               PHP              1     2     1.05
Anna               JAVA            2     1     NULL
Anna               PHP              2     2     NUL

Или это похоже на бред?

Отредактированно s435 (15.12.2014 10:42:45)

Неактивен

 

#2 15.12.2014 10:47:43

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Хитрый вопрос на склейку трех таблиц

Попробуйте

SELECT ns.*,n.*,p.* FROM namesprice ns JOIN names n ON ns.uid = n.id JOIN prices p ON ns.pid = p.id;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 15.12.2014 11:37:05

s435
Участник
Зарегистрирован: 15.12.2014
Сообщений: 9

Re: Хитрый вопрос на склейку трех таблиц

deadka написал:

Попробуйте

SELECT ns.*,n.*,p.* FROM namesprice ns JOIN names n ON ns.uid = n.id JOIN prices p ON ns.pid = p.id;

Вот так выводит

+-----+-----+------+----+------------------+----+------------------+
| uid | pid | val  | id | name             | id | price            |
+-----+-----+------+----+------------------+----+------------------+
|   1 |   1 | 1.0  |  1 | JOHN         |  1 | JAVA         |
|   1 |   2 | 1.01 |  1 | JOHN         |  2 | PHP           |
+-----+-----+------+----+------------------+----+------------------+

Неактивен

 

#4 15.12.2014 12:11:42

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Хитрый вопрос на склейку трех таблиц

Ну выберите только нужные Вам поля из нужных таблиц - получается из ns,n,p (namesprice,names,prices)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 15.12.2014 12:19:06

s435
Участник
Зарегистрирован: 15.12.2014
Сообщений: 9

Re: Хитрый вопрос на склейку трех таблиц

А можно чуть подробней... Я в sql новичок. Коротенький пример.
Вот я выбрал нужные имена SELECT ns.*,n.name,p.price FROM...
Выходит тот же результат только с нужными полями, но строки все равно 2. А надо чтобы выводило 4 строки.

Отредактированно s435 (15.12.2014 12:27:50)

Неактивен

 

#6 15.12.2014 12:50:33

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Хитрый вопрос на склейку трех таблиц

SELECT
ns.uid,
ns.pid,
ns.pid,
p.id,
p.price,
n.id,
n.name
FROM namesprice ns JOIN names n ON ns.uid = n.id JOIN prices p ON ns.pid = p.id;


Выбросьте ненужные поля из списка SELECT


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 15.12.2014 13:27:25

s435
Участник
Зарегистрирован: 15.12.2014
Сообщений: 9

Re: Хитрый вопрос на склейку трех таблиц

SELECT
    -> ns.uid,
    -> ns.pid,
    -> ns.val,
    -> p.price,
    -> n.name
    -> FROM namesprice ns JOIN names n ON ns.uid = n.id JOIN prices p ON ns.pid = p.id;
+-----+-----+------+------------------+------------------+
| uid | pid | val  | price            | name             |
+-----+-----+------+------------------+------------------+
|   1 |   1 | 1.0  | JAVA         | JOHN         |
|   1 |   2 | 1.01 | PHP           | JOHN         |
+-----+-----+------+------------------+------------------+
2 rows in set (0.00 sec)


А надо чтобы еще было 2 строки по пользователю ANNA
Anna               JAVA            2     1     NULL
Anna               PHP              2     2     NULL

Отредактированно s435 (15.12.2014 13:27:48)

Неактивен

 

#8 15.12.2014 13:29:12

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Хитрый вопрос на склейку трех таблиц

Так у Вас в таблице namesprice нет uid, который указывает на Anna


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#9 15.12.2014 13:42:36

s435
Участник
Зарегистрирован: 15.12.2014
Сообщений: 9

Re: Хитрый вопрос на склейку трех таблиц

Вот и я а том же...
Задачу мне дала одна фирма, как тестовую... Я уже все голову сломал, все виды джойнов перепробовал. Походу они издеваются. Вообще реально такой с использованием алиасов замутить?

Неактивен

 

#10 15.12.2014 13:43:28

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Хитрый вопрос на склейку трех таблиц

Что-то тут не то. Покажите текст задачи полный.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#11 15.12.2014 13:51:43

s435
Участник
Зарегистрирован: 15.12.2014
Сообщений: 9

Re: Хитрый вопрос на склейку трех таблиц

окей вот тут http://paste.ubuntu.com/9527204/
Я имена таблиц изменил, чтобы не спали что на форум запостил.
на мой взгяд полный бред - реально.
Ну вот хочу убедиться в этом.

Отредактированно s435 (15.12.2014 13:52:45)

Неактивен

 

#12 15.12.2014 15:24:11

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

Re: Хитрый вопрос на склейку трех таблиц

можно
select .. from (users, prices) left join userprice ..

Неактивен

 

#13 15.12.2014 15:49:41

s435
Участник
Зарегистрирован: 15.12.2014
Сообщений: 9

Re: Хитрый вопрос на склейку трех таблиц

ага уже близко http://paste.ubuntu.com/9528237/    , но не понимаю почему два раза распечатал.

Отредактированно s435 (15.12.2014 15:51:56)

Неактивен

 

#14 15.12.2014 17:00:25

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

Re: Хитрый вопрос на склейку трех таблиц

вместо
on users.id = userprice.uid;
нужно
on users.id = userprice.uid and prices.id=userprice.pid;

Неактивен

 

#15 15.12.2014 18:23:13

s435
Участник
Зарегистрирован: 15.12.2014
Сообщений: 9

Re: Хитрый вопрос на склейку трех таблиц

Вот спасибо, осталось алиасы, прописать и все... Буду думать.

Неактивен

 

#16 16.12.2014 07:18:00

s435
Участник
Зарегистрирован: 15.12.2014
Сообщений: 9

Re: Хитрый вопрос на склейку трех таблиц

Ну вот таки результат http://paste.ubuntu.com/9536516/
Спасибо всем кто помогал smile

Отредактированно s435 (16.12.2014 07:23:59)

Неактивен

 

Board footer

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