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
в tid table3 есть id из table1 и table2
Спустя 15 минут, 22 секунды (28.03.2012 - 20:01) Placido написал(а):
Уточню: id из table1 должно быть равно id из table2? Если да, то так:
Если они не зависят друг от друга, но должны быть равны tid, то так:
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 забыл, сижу главно по мануалу шуршу и его в упор не вспомнил
я в первом посте не полные структуры указал и условия - основные. Всё путём. держи +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 написал(а):
вопрос снят, мне подфортило, так как не все столбцы нужны при выборке.... осталось тока закрепить практикой

Спустя 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 чёт вредничает - но смысл я уяснил
а вот с явным перечислением равным кол-вом полей в обоих запросах - проканала с первой попытки.
а вот с явным перечислением равным кол-вом полей в обоих запросах - проканала с первой попытки.

_____________
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