[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выборка из 2 таблиц + сортировка по третьей
Игорь_Vasinsky
Башка не варит, но сделать надо, вообщем есть

table1

id | title | hm | vm | mark

table2

id | name | hm | vm | mark

table3

id | tid | pos


Запрсо должен выбрать строки из таблиц table1 и table2, где hm = 1, и отсортировать по pos, при условии, что tid = id из table1 и table2







Спустя 26 минут (28.03.2012 - 19:45) Игорь_Vasinsky написал(а):
table1 и table2 между собой ни как не связаны
в tid table3 есть id из table1 и table2


Спустя 15 минут, 22 секунды (28.03.2012 - 20:01) Placido написал(а):
Уточню: id из table1 должно быть равно id из table2? Если да, то так:
SELECT t1.*, t2.* 
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.id
JOIN table3 t3 ON t3.tid = t2.id
WHERE t1.hm = 1 AND t2.hm = 1 ORDER BY t3.pos

Если они не зависят друг от друга, но должны быть равны tid, то так:
(SELECT t1.* 
FROM table1 t1
JOIN table3 t3 ON t1.id = t3.tid
WHERE t1.hm = 1)
UNION
(SELECT t2.*
FROM table2 t2
JOIN table3 t3 ON t2.id = t3.tid
WHERE t2.hm = 1)
ORDER BY t3.pos

Спустя 3 минуты, 25 секунд (28.03.2012 - 20:04) Игорь_Vasinsky написал(а):
нет 2й вариант, щас проверю...

Спустя 13 минут, 13 секунд (28.03.2012 - 20:17) Placido написал(а):
Единственное, в чем не уверен, возможно, нужно добавить t3.pos в часть SELECT
(SELECT t1.*, t3.pos 
FROM table1 t1
JOIN table3 t3 ON t1.id = t3.tid
WHERE t1.hm = 1)
UNION
(SELECT t2.*, t3.pos
FROM table2 t2
JOIN table3 t3 ON t2.id = t3.tid
WHERE t2.hm = 1)
ORDER BY t3.pos


Спустя 1 минута, 50 секунд (28.03.2012 - 20:19) Игорь_Vasinsky написал(а):
да, спс, как я про UNION забыл, сижу главно по мануалу шуршу и его в упор не вспомнил laugh.gif я в первом посте не полные структуры указал и условия - основные. Всё путём. держи +1

Цитата
нужно добавить t3.pos в часть SELECT

да, без него ругалось.

Спустя 4 минуты, 4 секунды (28.03.2012 - 20:23) Игорь_Vasinsky написал(а):
и кстати

Цитата
WHERE t1.hm = 1


я сам тормознул - эти условия избыточные, т.к. id из table1 и table2 будут находиться в tid table3 итак при этом условии)))

Спустя 1 минута, 58 секунд (28.03.2012 - 20:25) Игорь_Vasinsky написал(а):
оОоо... а если при UNION используется запросы в 2 таблицы с разным кол-вом столбцов??? а то ругается...

Спустя 2 минуты, 21 секунда (28.03.2012 - 20:28) Игорь_Vasinsky написал(а):
вопрос снят, мне подфортило, так как не все столбцы нужны при выборке.... осталось тока закрепить практикой laugh.gif

Спустя 6 минут, 2 секунды (28.03.2012 - 20:34) Placido написал(а):
Если разное количество, то отсутствующее поле заменяем на NULL (например, во второй таблице нет поля f3)
SELECT `f1`, `f2`, `f3` 
FROM `table1`
UNION
SELECT `f1`, `f2`, NULL AS `f3`
FROM `table2`;

Спустя 19 минут, 9 секунд (28.03.2012 - 20:53) Игорь_Vasinsky написал(а):
с NULL as чёт вредничает - но смысл я уяснил
а вот с явным перечислением равным кол-вом полей в обоих запросах - проканала с первой попытки. wink.gif


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.