Присоединяйтесь к таблицам SQL Server с помощью аналогичного оператора

Я надеюсь, что это не повтор. Я проверил поиски, и я не могу найти четкого ответа на этот вопрос.

У меня есть таблица, первичный ключ которой установлен как UniqueIdentifier.У меня также есть другая таблица со столбцом varchar, который в основном содержит URL-адрес со строкой запроса, содержащей идентификаторы из моей первой таблицы.

Итак, мои 2 таблицы похожи на:

Таблица состояний

StateID                                  StateName
EB06F84C-15B9-4397-98AD-4A63DA2A238E     Active

Таблица URL

URL
page.aspx?id=EB06F84C-15B9-4397-98AD-4A63DA2A238E

То, что я пытаюсь сделать, это объединить URLTableи StateTable. Значение StateIDсодержится в URL-адресе таблицы URL-адресов. Я не совсем понял, как присоединиться. Я даже пытался просто выбрать одну таблицу и попытался отфильтровать значения в StateTable. Я пытался сделать что-то вроде этого:

SELECT  *
FROM URLTable
WHERE     EXISTS
    (SELECT  *
     FROM  StateTable
     WHERE URL LIKE '%' + StateID + '%')

Даже это не работает, потому что написано, что я сравниваю uniqueidentifierи varchar.

Есть ли способ объединить 2 таблицы с помощью похожей команды и где подобная команда не сравнивает 2 несовместимые переменные?

Спасибо!!

ОБНОВЛЕНИЕ :Позвольте мне добавить некоторые дополнительные вещи, о которых я должен был упомянуть. Запрос предназначен для построения аналитических отчетов. Таблицы являются частью пакета аналитики CMS... поэтому обновление или изменение структуры таблиц невозможно.

Во-вторых, эти таблицы имеют очень большой объем трафика, поскольку они собирают аналитику сайта... поэтому производительность очень важна. В-третьих, в моем примере я сказал id=, но может быть несколько значений, таких как id=guid&user=guid&date=date.

ОБНОВЛЕНИЕ 2 :Еще одна вещь, которую я только что осознал, к своему ужасу, заключается в том, что иногда в строке запроса удаляются дефисы из GUID... а иногда нет... поэтому, если я не ошибаюсь, я не могу преобразовать подстроку в Uniqueidentifier. Кто-нибудь может подтвердить? вздох . Я заставил его работать, используя

REPLACE('-','',CONVERT(varchar(50), a.AutomationStateId))

но теперь меня очень беспокоят проблемы с производительностью, поскольку таблица URL-адресов очень большая. Хотя, возможно, такова природа зверя, если только я ничего не могу сделать.

12
задан marc_s 5 April 2012 в 05:07
поделиться