Най-простото решение е да използвате две отделни заявки.
Използваме резултата от първата заявка, за да генерираме динамично SQL текста за втората заявка.
mysql> SET @colname := '' ;
mysql> SELECT t.rslt FROM table1 t WHERE t.id = 1 ORDER BY t.rslt LIMIT 1 INTO @colname ;
mysql> SET @sql := CONCAT('SELECT `',@colname,'` FROM table2 ORDER BY 1') ;
mysql> PREPARE stmt FROM @sql ;
mysql> EXECUTE stmt ;
mysql> DEALLOCATE PREPARE stmt ;
N.B. включително @colname
като част от SQL текста, динамично подготвен SQL, е потенциална уязвимост при инжектиране на SQL.
Ако изискването е да се направи нещо подобно в контекста на сингъл SQL израз, тогава изразът трябва да предвиди възможните стойности, които да бъдат върнати за заявката от таблица1, и да включва изрични препратки към възможните колони от таблица2. Например, нещо подобно:
SELECT CASE ( SELECT t.rslt FROM table1 t WHERE t.id = 1 LIMIT 1 )
WHEN 'r1' THEN r.r1
WHEN 'r2' THEN r.r2
WHEN 'r3' THEN r.r3
ELSE NULL
END AS c2
FROM table2 r
ORDER BY ...
Това не е непременно най-ефективният начин за написване на заявката, но демонстрира модела.
В рамките на SQL оператор идентификаторите (имена на таблици, имена на колони, имена на функции) трябва да бъдат посочени изрично; те не могат да бъдат извлечени динамично по време на изпълнение. Това се дължи на начина, по който SQL изразите се обработват... анализиране на SQL текста за синтаксис, след това анализиране за семантика (валидни препратки и привилегии), оценка на относителната цена за наличните пътища за достъп, избор на план за изпълнение и след това изпълнение на този план.
Тоест, поведението, наблюдавано с този SQL, е това, което очакваме:
SELECT (SELECT rslt FROM table1 WHERE id = 1) FROM table2
SQL текстът се подготвя и по време на изпълнение, за всеки ред в таблица 2, подзаявката в SELECT
списъкът се изпълнява. Ако подзаявката върне скаларна стойност, скаларната стойност се връща като колона на външната заявка. Стойността, върната от подзаявката, е стойност , не се оценява (и не може да бъде) оценено като име на колона.