Ранее я просил удалить текст из поля и преобразовать его в int, это успешно работает. Но теперь я хотел бы выполнить ВНУТРЕННЕЕ СОЕДИНЕНИЕ с этим новым значением.
Итак, у меня есть это:
SELECT CONVERT(int, SUBSTRING(accountingTab.id, PATINDEX('%[0-9]%', accountingTab.id), 999))
AS 'memId', userDetails.title, userDetails.lname
FROM accountingTab INNER JOIN
(SELECT id, title, first, last FROM memDetTab) AS userDetails ON memID = userDetails.id
И затем я получаю ошибку Invalid Column Name memID.
Как я могу это исправить?


Вместо memId повторите все выражение целиком.
Если вам нужно это сделать, у вас проблемы с дизайном. Если вы можете, я бы посоветовал вам провести рефакторинг вашей таблицы или отношений.
Возможно, вы можете восстановить ключевое поле из поля id и / или разделить поле accountTab.id на компоненты, которые можно собрать в исходное поле id?
Спасибо, я попробую, я лучше сделаю это, чем возьмусь с этим.
Для тех, кто проголосовал против этого ответа: иногда ответ, который нужен или хочет услышать человек, звучит так: «Вам не следует делать это, попробуйте вместо этого что-нибудь другое».
Я не голосовал против, но имейте в виду, что иногда человек работает с базой данных в ситуации, когда рефакторинг модели данных невозможен. Для этого есть масса «веских», но «оскорбительных» причин. Расписания, внутренняя политика, абсолютный вес кода. Ваша точка зрения, конечно, верна, но вы можете подумать об ответе на конкретный вопрос в дополнение к тому, чтобы изложить свою точку зрения.
@jaydel Да, я согласен, но тот факт, что ситуация может или не может разрешить рефакторинг базы данных, не означает, что это неверный ответ, если только вопрос не предоставил контекст, чтобы указать это. Я не делал никаких особых указаний - это, собственно, то, что я сделал бы в его ситуации, если бы была возможность.
... не говоря уже о том, что человеку, задавшему вопрос, казалось, это был правильный и приемлемый ответ. Я думаю, что он или она должны быть арбитром в том, был ли этот ответ полезен и действителен для его вопроса.
Да, когда этот вопрос стал первым хитом в Google, я был ТАК рад увидеть ответ, что у меня проблемы с дизайном, и мне нужно реорганизовать свою таблицу. ДЕЙСТВИТЕЛЬНО полезный ответ. Спасибо большое.
@chiliNUT Мой детектор сарказма отключен.
Вы можете либо повторить все выражение целиком, либо отменить соединение:
SELECT *
FROM memDetTab
JOIN (SELECT CONVERT(int, SUBSTRING(accountingTab.id, PATINDEX('%[0-9]%', accountingTab.id), 999)) AS 'memId', userDetails.title, userDetails.lname
FROM accountingTab) subquery
ON subquery.memID = memDetTab.ID
Спасибо за идею :) Мне помогло.
Исходная связь - с полностью отдельной таблицей, и эта таблица во времени потеряла информацию, поэтому следующая лучшая таблица - это таблица учета :(