[не бить ногами] sql запрос как написать.
from (
select 1 as a, 2 as b
from dual
) T;
спасибо!
SELECT *
FROM ( 1 AS a, 1 AS b, 1 AS c ) A
CROSS JOIN ( 2 AS a, 2 AS b, 2 AS c ) B
LEFT JOIN ( 3 AS a, 3 AS b, 2 AS c ) C ON c.c = b.c
LIMIT 0 , 30
Ответ MySQL: Документация
- You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1 as a,1 as b,1 as c) A
cross join (2 as a,2 as b, 2 as c) B
left join (3 as a' at line 1
после cross разве left нельзя?
Ты решаешь какую-то поставленную задачу или фигней страдаешь?
SELECT *
FROM (select 1 AS a, 1 AS b, 1 AS c ) A
CROSS JOIN (select 2 AS a, 2 AS b, 2 AS c ) B
LEFT JOIN (select 3 AS a, 3 AS b, 2 AS c ) C ON c.c = b.c
LIMIT 0 , 30
?
P.S. MySQL не знаю.
задача есть.
получить всё за один запрос.
есть информация об организациях, но часть инфы в одной таблице, часть в другой.
т.е. с помощью inner join можно сделать одну общую таблицу.
ещё есть некоторые показали, которые вычисляются на основе номера организации.
вот хочется всё в кучу собрать и при этом не вычислять некоторые величины несколько раз.
например, есть показатели в таблице: кол-во заказов, кол-во сорваных сделок, кол-во сорваных сделок по вине сотрудников.
но эти данные сами по себе не нужны, нужно, например, отношение сорванных к заказам.
эти числа есть в каких-то других таблицах(в примере выше это lalala, lalala2,lalala3, они большие и несолько раз их писать не хочется.)
таким образом хотим, таблицу в строках номер организации, какая-то инфа об этой организации, потом показатели этой организации.
ПРОБЛЕМА:
функции вычисляются для каждой организации.
т.е. что-то типа
(select count(*)
from a inner join d on d.id=a.op
where a.ttt=1
a.ccc=2
a.yyy =3
d.number = T.id)
где T.id это номер этой организации
обозначим селект выше как [select1]
по аналогии есть [select2],[select3]
сейчас работает так
select L.id,L.name,S.param [select1] as p1, [select2] as p2, [select3] as p3
from orglist L
left join orgstat S on orglist.id = orgstat.orgid
where 1
а потом уже из результата php из p1,p2,p3 получает нужные величины.
написал много. и наверно не очень понятно. хотя пример должен помочь
вот так заработало.
сейчас попробуем внердрить эту схему
SELECT *
FROM (
SELECT 1 AS aa, 1 AS ab, 1 AS ac
)A
CROSS JOIN (
SELECT 2 AS ba, 2 AS bb, 2 AS bc
)B
LEFT JOIN (
SELECT 3 AS ca, 3 AS cb, 2 AS cc
)C ON C.cc = B.bc
она не внедрится, т.к. селекты зависимы от большого селекта(по полю T.id из примера поэтому их в from нельзя помеситть.
Задача решена.
Как могу догадываться компаний у вас не более 100, при таких кол-вах ничего тормозить не должно.
насчёт скорости посмотрим как будет. получается же 3 вложенных селекта
сейчас пишу так:
select t.a,t.b,t.c from
(select
L.id as lid
L.param1 as la
L.param2 as lb
S.param3 as Sa
[select1] as a,
[select2] as b,
[select3] as c,
from orglist L
left join orgstat S on orglist.id = orgstat.orgid
)
спасибо.
со скоростью норм.
для отчёта не особо медленнее того, что было.
Оставить комментарий
Phoenix
SELECT 3 AS a, 4 AS b, a / b AS c;пишет
- Unknown column 'a' in 'field list'
в реале есть что-то вроде
select (lalala) as A, (lalala2) as B, lalala3) / A ) as D from lalala4
как написать без ошибки?