Использование столбца в качестве таблицы соединения с concat - PullRequest
0 голосов
/ 10 января 2019

Я пытался объединить другую таблицу с именем таблицы, совпадающим со значением в столбце другой таблицы.

Если я жестко закодирую имя таблицы в соответствующую таблицу, например __gun, она работает нормально, но я не могу получить значение col, которое будет использоваться + concat подчеркивает в начале.

Проблема заключается в left join здесь:

left join CONCAT('__', b.related_table) c on b.related_id = c.id

Мне нужен столбец related_table для использования в соединении. С __ перед ним.

Попытки:

        SELECT a.*, c.*, b.equipable, b.related_table FROM inventory a
        inner join items b on a.item_id = b.id
        left join CONCAT('__', b.related_table) c on b.related_id = c.id
        WHERE 1=1
        and a.id = :inventory_id
        and a.user_id = :user_id

enter image description here


        SELECT a.*, c.*, b.equipable, b.related_table FROM inventory a
        inner join items b on a.item_id = b.id
        left join '__'+b.related_table c on b.related_id = c.id
        WHERE 1=1
        and a.id = :inventory_id
        and a.user_id = :user_id

enter image description here


        SELECT a.*, c.*, b.equipable, b.related_table FROM inventory a
        inner join items b on a.item_id = b.id
        left join "__"+Cast(b.related_table as nvarchar(4000)) c on b.related_id = c.id
        WHERE 1=1
        and a.id = :inventory_id
        and a.user_id = :user_id

enter image description here

Спасибо, что рассмотрели мой вопрос

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Вы можете сделать это, используя Подготовленные операторы или вы можете сказать динамический SQL. Выполните следующие действия:

  1. Используйте SET для имени таблицы.
  2. Используйте CONCAT , чтобы получить желаемое имя таблицы.
  3. PREPARE оператор для таблицы, созданной на шаге 1.
  4. EXECUTE оператор.
  5. DEALLOCATE PREPARE для выпуска подготовленного оператора.
0 голосов
/ 10 января 2019

Вы не можете создать имя таблицы.

План A: Переосмыслить схему. обычно плохой дизайн, чтобы иметь несколько «идентичных» таблиц.

План B: Напишите хранимую процедуру, которая использует CONCAT, PREPARE, EXECUTE и DEALLOCATE_PREPARE для построения и запуска запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...