У меня есть две таблицы:
Таблица 1: CustomerEmails:
CREATE TABLE [dbo].[CustomerEmails](
[id] [int] IDENTITY(1,1) NOT NULL,
[datecreated] [datetime] NULL,
[UID] [nvarchar](250) NULL,
[From] [nvarchar](100) NULL,
[To] [nvarchar](100) NULL,
[Subject] [nvarchar](max) NULL,
[Body] [nvarchar](max) NULL,
[Dated] [datetime] NULL,
CONSTRAINT [PK_CustomerEmails] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)
Таблица 2: CustomerEmailIds :
CREATE TABLE [dbo].[CustomerEmailIds](
[Email] [varchar](200) NULL
) ON [PRIMARY]
Возможно, вы думаете, почему я не использую EmailId в таблице CustomerEmails вместо использования самих электронных писем?Я имею в виду, что я могу добавить столбец EmailId (INT) к таблице CustomerEmailIds, а затем я могу ссылаться на этот столбец вместо CustomerEmails.From & CustomerEmails.To ??Ребята, проблема в том, что таблица CustomerEmails используется каким-либо другим приложением, и это приложение просто отслеживает электронные письма, отправленные / полученные через OutLook.В таблице CustomerEmailIds содержатся электронные письма клиентов, и эти сообщения поступают в систему из приложения, над которым я работаю.
Таким образом, в таблице CustomerEmails содержится более 7 000 000 записей, в то время как в таблице CustomerEmailIds содержится более 1 000 000 записей.1016 * Мне нужно выяснить электронные письма из таблицы CustomerEmails, основываясь на электронных письмах в таблице CustomerEmailIds.
Я использую следующий запрос:
SELECT
e.*
FROM CustomerEmails e
WHERE EXISTS
(
SELECT Email
FROM CustomerEmailIds c
WHERE ( ISNULL(e.[From],'') + '/' + ISNULL(e.[To],'') ) LIKE '%'+c.Email+'%'
)
Some facts:
1- I am using SQL Server 2008
2- Sorry guys, i forgot to mention that the CustomerEmails.**To** can contains multiple comma separated emails like: email1@yahho.com,email2@yahho.com,email3@yahho.com
3- Because of the fact2 the c.Cs3Emails+'%' OR to= c.Cs3Emails will not list the desired results that's why i am using '%'+c.Cs3Emails+'%'
Последние результаты: ребята, приведенный выше запрос возвращает неправильные результаты ..... и я не знаю, почему ??
Но приведенный ниже запрос работает нормально:
SELECT
e.*
FROM CustomerEmails e
WHERE (ISNULL(e.[From],'') + '/' + ISNULL(e.[To],'')) LIKE '%email1@gmail.com%'