Я надеюсь, что это не повторение. Я проверил поиски, и я не могу найти четкого ответа на этот вопрос.Присоединяйтесь к таблицам SQL Server в аналогичном заявлении
У меня есть таблица, у которой есть первичный ключ, который должен быть UniqueIdentifier
. У меня также есть другая таблица, в которой есть столбец varchar
, который в основном содержит URL-адрес с строкой запроса, содержащей указатели из моей первой таблицы.
Так мои 2 таблицы как:
StateTable
StateID StateName
EB06F84C-15B9-4397-98AD-4A63DA2A238E Active
URLTable
URL
page.aspx?id=EB06F84C-15B9-4397-98AD-4A63DA2A238E
То, что я пытаюсь сделать, это присоединиться вместе URLTable
и StateTable
ON значение StateID
в URL-адрес URL-адреса. Я действительно не понял, как присоединиться. Я даже попробовал просто выбрать одну таблицу и попытался отфильтровать значения в StateTable
. Я пытался сделать что-то вроде этого:
SELECT *
FROM URLTable
WHERE EXISTS
(SELECT *
FROM StateTable
WHERE URL LIKE '%' + StateID + '%')
Даже это не работает, потому что он говорит, что я сравниваю uniqueidentifier
и varchar
.
Есть ли способ присоединиться к двум таблицам с помощью команды like и где подобная команда не сравнивает 2 несовместимых переменных?
спасибо !!
ОБНОВЛЕНИЕ: Позвольте мне добавить некоторые дополнительные вещи, о которых я должен был упомянуть. Запрос предназначен для создания отчетов аналитики. Таблицы являются частью пакета аналитики CMS ... поэтому обновление или изменение структуры таблицы не является вариантом.
Во-вторых, эти таблицы видят очень большой объем трафика, так как они захватывают аналитику сайта ... так что производительность очень важна. Третье, что в моем примере, я сказал id =, но может быть несколько значений, таких как id=guid&user=guid&date=date
.
ОБНОВЛЕНИЕ 2: Еще одна вещь, которую я только что осознал в своем ужасе, состоит в том, что иногда строка запроса содержит дефисы, удаленные из GUID .. и иногда нет .. поэтому, если я не ошибаюсь, я не могу использовать подстроку к Uniqueidentifier
. может кто-нибудь подтвердить? вздох. Я заставить его работать, используя
REPLACE('-','',CONVERT(varchar(50), a.AutomationStateId))
, но теперь я очень беспокоюсь о проблемах производительности с этим, так как таблица URL, очень велик. Это может быть природа зверя, хотя, если я ничего не могу сделать.
+1 и я думаю, что вы могли бы использовать этот синтаксис в соединении – Paparazzi
Обновлен ответ – Arion
Будет ли это работать, если я должен что-то использовать, зная, что Я ищу, всегда будет следовать строке «ID =», и всегда будут следующие 36 символов? Может быть, что-то вроде CAST (SUBSTRING (URL, CHARINDEX ('ID =', URL) +1,36) AS UNIQUEIDENTIFIER) = StateID и что такое производительность по этому поводу? – divamatrix