Я пытаюсь объединить две таблицы, но другое имя таблицы находится в столбце первой таблицы. Можно ли присоединиться или есть - PullRequest
0 голосов
/ 07 февраля 2020

Объединение двух таблиц ... одно имя таблицы также является именем столбца. SQL

FROM table fs
INNER JOIN fs.tablenamecolumn st 
ON fs.t_ID=st.t_ID
where t=1250```

error--
Invalid object name 'fs.tablenamecolumn '.

Ответы [ 3 ]

0 голосов
/ 07 февраля 2020

В тех случаях, когда условие задает псевдоним таблицы в столбце, псевдоним будет использоваться для таблицы, которую вы хотите фильтровать.

select FROM table fs
INNER JOIN fs.tablenamecolumn st 
ON fs.t_ID=st.t_ID
where fs.t=1250
0 голосов
/ 07 февраля 2020

Не совсем. Это даже довольно сложно с использованием Dynami c SQL, потому что имя может меняться от строки к строке.

Вам следует пересмотреть модель данных. То, что вы делаете, вероятно, совершенно не нужно .

Если существует ограниченный набор таблиц, вы можете использовать left join:

FROM table fs LEFT JOIN
     table1 t1
     ON fs.t_ID = t1.t_ID AND
        fs.tablenamecolumn = 'table1' LEFT JOIN
     table2 t2
     ON fs.t_ID = t2.t_ID AND
        fs.tablenamecolumn = 'table2' LEFT JOIN
     . . .
WHERE fs.t = 1250
0 голосов
/ 07 февраля 2020

Редактировать: я только что понял, что это для MySQL, а не MS SQL. Так что вам нужно будет использовать подготовить заявление. надеюсь, что вы можете использовать приведенное ниже в качестве руководства, чтобы помочь вам.

Вам нужно будет создать SQL динамически, например,

DECLARE @tablename AS VARCHAR(100)
SELECT  @tablename = tablnamecolumn FROM [yourtable]

DECLARE @query AS NVARCHAR(MAX)
SET     @query = 
'SELECT * 
 FROM [yourtable] 
 INNER JOIN ' + @tablename + ' 
 ON fs.t_ID=st.t_ID
 WHERE t=1250'

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