Задавайте вопросы, мы ответим
Вы не зашли.
Есть три таблицы:
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)
Неактивен
Попробуйте
Неактивен
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 |
+-----+-----+------+----+------------------+----+------------------+
Неактивен
Ну выберите только нужные Вам поля из нужных таблиц - получается из ns,n,p (namesprice,names,prices)
Неактивен
А можно чуть подробней... Я в sql новичок. Коротенький пример.
Вот я выбрал нужные имена SELECT ns.*,n.name,p.price FROM...
Выходит тот же результат только с нужными полями, но строки все равно 2. А надо чтобы выводило 4 строки.
Отредактированно s435 (15.12.2014 12:27:50)
Неактивен
Неактивен
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)
Неактивен
Так у Вас в таблице namesprice нет uid, который указывает на Anna
Неактивен
Вот и я а том же...
Задачу мне дала одна фирма, как тестовую... Я уже все голову сломал, все виды джойнов перепробовал. Походу они издеваются. Вообще реально такой с использованием алиасов замутить?
Неактивен
Что-то тут не то. Покажите текст задачи полный.
Неактивен
окей вот тут http://paste.ubuntu.com/9527204/
Я имена таблиц изменил, чтобы не спали что на форум запостил.
на мой взгяд полный бред - реально.
Ну вот хочу убедиться в этом.
Отредактированно s435 (15.12.2014 13:52:45)
Неактивен
можно
select .. from (users, prices) left join userprice ..
Неактивен
ага уже близко http://paste.ubuntu.com/9528237/ , но не понимаю почему два раза распечатал.
Отредактированно s435 (15.12.2014 15:51:56)
Неактивен
вместо
on users.id = userprice.uid;
нужно
on users.id = userprice.uid and prices.id=userprice.pid;
Неактивен
Вот спасибо, осталось алиасы, прописать и все... Буду думать.
Неактивен
Ну вот таки результат http://paste.ubuntu.com/9536516/
Спасибо всем кто помогал
Отредактированно s435 (16.12.2014 07:23:59)
Неактивен