Как вытащить во вложенном SELECT запись, используя Текущий код внешнего SELECT?
Есть такие таблицы, все поля описывать не буду, главное связи:
Главная, тут просто все - свой код + 2 связи на таблицы классификаторы.
------------------------------------
| m_plan |
-----------------------------------
| CODE(int) |
| NAME_WORK(VARCHAR[255]) |
| DATE(timestamp) |
-----------------------------------
Связочная таблица - в ней код из таблицы m_plan ? а также связь с таблицей m_clients
----------------------
| mc_customer |
----------------------
| PLAN_CODE(int) |
| CLIENT_CODE(int)|
----------------------
Таблица клиентов, тут просто код и имя
------------------------------
| m_clients |
------------------------------
| CODE(int) |
| NAME(VARCHAR[255])|
------------------------------
Есть такой запрос:
SELECT (
SELECT
m_clients.NAME
FROM
m_clients
LEFT JOIN
mc_customer
ON
mc_customer.CLIENT_CODE = m_clients.CODE
LEFT JOIN
m_plan
ON
mc_customer.PLAN_CODE = m_plan.CODE
WHERE
mc_customer.PLAN_CODE = 'x'),
m_plan.CODE,
m_plan.NAME_WORK,
FROM m_zakaz
Интересует жирный кусок запроса, мне нужно достать данное имя клиента как одну запись, а не как массив, то, (WHERE mc_customer.PLAN_CODE = 'x') я бы хотел опустить или превратить во что-то - типа:
WHERE
mc_customer.PLAN_CODE = CURRENT(m_plan.CODE)
ТО есть нужен текущий код плана на итерации, возможно ли такое вообще в Mysql без использования с++, такая задача необходима для нормальной работы грида в Библиотеке Devexpress для VCL
Начнем с жирного куска. Он выбирает все записи из m_clients независимо от условия mc_customer.PLAN_CODE = 'x'. Чтобы это условие заработало, надо оба LEFT JOIN заменить на JOIN.
Теперь разберем отношения между сущностями. Та схема, что вы описали, подразумевает, что между m_plan и m_clients отношение МногиеКоМногим, которое описывается в mc_customer. В этом случае, жирный запрос всегда будет возвращать массив. Если на самом деле у плана может быть только один клиент (или наоборот), то вам надо поменять схему.
Ну и по поводу самого запроса - не понял, что именно вы хотите получить? Функции CURRENT() нет в MySQL (да и вообще в SQL).
P.S. Для оформления кода пользуйтесь, пожалуйста, встроенным редактором.