@EVOSandru6

Как вытащить во вложенном 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
  • Вопрос задан
  • 2194 просмотра
Пригласить эксперта
Ответы на вопрос 1
Начнем с жирного куска. Он выбирает все записи из m_clients независимо от условия mc_customer.PLAN_CODE = 'x'. Чтобы это условие заработало, надо оба LEFT JOIN заменить на JOIN.
Теперь разберем отношения между сущностями. Та схема, что вы описали, подразумевает, что между m_plan и m_clients отношение МногиеКоМногим, которое описывается в mc_customer. В этом случае, жирный запрос всегда будет возвращать массив. Если на самом деле у плана может быть только один клиент (или наоборот), то вам надо поменять схему.
Ну и по поводу самого запроса - не понял, что именно вы хотите получить? Функции CURRENT() нет в MySQL (да и вообще в SQL).

P.S. Для оформления кода пользуйтесь, пожалуйста, встроенным редактором.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы