MYSQL join - ссылочное внешнее поле из вложенного select? - PullRequest
0 голосов
/ 10 июня 2010

Разрешено ли ссылаться на внешнее поле из вложенного выбора?

например.

SELECT
FROM ext1
LEFT JOIN (SELECT * FROM int2 WHERE int2.id = ext1.some_id ) as x ON 1=1

в этом случае это ссылка на ext1.some_id во вложенном select. Я получаю ошибки в этом случае, что поле ext1.some_id неизвестно. Является ли это возможным? Есть ли другой способ?

UPDATE:

К сожалению, я должен использовать вложенный выбор, так как я собираюсь добавить к нему больше условий, таких как LIMIT 0,1 а затем мне нужно использовать второе соединение на той же таблице с LIMIT 1,1 (чтобы присоединиться к другой строке) Конечная цель - объединить 2 строки из одной таблицы, как если бы это были две таблицы. Так что я собираюсь «разложить» несколько связанных строк в один длинный ряд.

Ответы [ 3 ]

2 голосов
/ 10 июня 2010

Ответ на ваш первоначальный вопрос: Нет, удалите подзапрос и поместите условие в ON -класс:

SELECT *
FROM ext1
LEFT JOIN int2 ON ( int2.id = ext1.some_id )

Одним из решений может быть использование переменных длянайдите первую (или вторую) строку, но это решение не будет эффективно работать с индексами, поэтому у вас могут возникнуть проблемы с производительностью.

SELECT ext1.some_id, int2x.order_col, int2x.something_else
FROM ext1
LEFT JOIN (SELECT `int2`.*, @i:=IF(@id=(@id:=id), @i+1, 0) As rank
           FROM `int2`,
           ( SELECT @i:=0, @id:=-1 ) v
              ORDER BY id, order_col ) AS int2x ON (     int2x.id = ext1.some_id
                                                             AND int2x.rank = 0 )
;

Это предполагает, что у вас есть столбец, который вы хотите упорядочить по(order_col) и Left Присоединяется к первому ряду за some_id.

0 голосов
/ 10 июня 2010

Вот для чего предложение ON:

SELECT
FROM ext1
LEFT JOIN int2 AS x ON x.id = ext1.some_id
0 голосов
/ 10 июня 2010

Вы имеете в виду это?

SELECT ...
FROM ext1
LEFT JOIN int2 ON int2.id=ext1.some_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...