Допустим, у меня есть следующий запрос.Как дать таблице имя псевдонима только один раз в mysql
SELECT a.num Num , a.info infoA,
b.info infoB,
c.info infoC
FROM tbl_1 a
LEFT OUTER JOIN tbl_2 b USING (num)
LEFT OUTER JOIN tbl_3 c USING (num)
UNION
SELECT b.num Num , a.info infoA,
b.info infoB,
c.info infoC
FROM tbl_2 b
LEFT OUTER JOIN tbl_1 a USING (num)
LEFT OUTER JOIN tbl_3 c USING (num)
UNION
SELECT c.num Num , a.info infoA,
b.info infoB,
c.info infoC
FROM tbl_3 c
LEFT OUTER JOIN tbl_1 a USING (num)
LEFT OUTER JOIN tbl_2 b USING (num)
http://sqlfiddle.com/#!2/b0593f/12/0
Проблема заключается в том, что вместо имен таблиц tbl_1, tbl_2 и tbl_3 у меня есть внутренний SELECT, querys, например:
FROM (SELECT...) a
Я хотел бы написать имена таблиц (tbl_1 , tbl_2, tbl_3) только один раз, поэтому мне не пришлось бы многократно переписывать мои внутренние запросы SELECT.
Я пытался сделать что-то вроде этого, но он дал мне ошибку sytax:
SELECT a.num Num , a.info infoA,
b.info infoB,
c.info infoC
FROM (SELECT...) a
LEFT OUTER JOIN b USING (num)
LEFT OUTER JOIN c USING (num)
UNION
SELECT b.num Num , a.info infoA,
b.info infoB,
c.info infoC
FROM (SELECT...) b
LEFT OUTER JOIN a USING (num)
LEFT OUTER JOIN c USING (num)
UNION
SELECT c.num Num , a.info infoA,
b.info infoB,
c.info infoC
FROM (SELECT...) c
LEFT OUTER JOIN a USING (num)
LEFT OUTER JOIN b USING (num)
Но когда я пишу код, как это работает.
SELECT a.num Num , a.info infoA,
b.info infoB,
c.info infoC
FROM (SELECT...) a
LEFT OUTER JOIN (SELECT...) b USING (num)
LEFT OUTER JOIN (SELECT...) c USING (num)
UNION
SELECT b.num Num , a.info infoA,
b.info infoB,
c.info infoC
FROM (SELECT...) b
LEFT OUTER JOIN (SELECT...) a USING (num)
LEFT OUTER JOIN (SELECT...) c USING (num)
UNION
SELECT c.num Num , a.info infoA,
b.info infoB,
c.info infoC
FROM (SELECT...) c
LEFT OUTER JOIN (SELECT...) a USING (num)
LEFT OUTER JOIN (SELECT...) b USING (num)
КТР? Кстати, не связано, почему бы не UNION ALL? – jarlh