我需要比较表中的电子邮件,如果它们匹配,我需要显示第三张表中的一些数据,我试图通过while循环来做到这一点,该循环遍历所有电子邮件的字符串并对其进行比较,如果有一个匹配项,它应该从第三张表中获取数据
我从以下位置粘贴来自pastebin的查询:https://pastebin.com/zyjcJngf
我要使用循环的部分
select distinct Email,
CASE dbo.spValueToString((SELECT COUNT(*)
FROM tblEmailBlackList WHERE tblEmailBlackList.Email=LiveCampaign_SubscriberList_Email.Email AND tblEmailBlackList.PortalID>=-1))
WHEN 'Da' THEN
WHILE @vsi > 1
BEGIN
SET @testEmail = (SELECT LEFT(@resultCpy, CHARINDEX(',', @resultCpy) - 1)) --dobi prvi mail
SET @testEmail = (SELECT REPLACE(@testEmail, ' ', '')) --zbriše vse ' ' če obstajajo
SET @resultCpy = (SELECT SUBSTRING(@resultCpy, LEN(@testEmail) + 2, LEN(@resultCpy))) --odstani prvi mail
IF
@testEmail = Email
BREAK
ELSE
SET @vsi = @vsi - 1
END
SET @vsi = (SELECT LEN(@result) - LEN(REPLACE(@result, ',', '')) + 1)
SET @resultCpy = @result
(SELECT DISTINCT PortalLocalization.PortalName
FROM tblEmailBlackList
LEFT JOIN tblLiveCampaignSettings ON tblLiveCampaignSettings.ModuleID = tblEmailBlackList.ModuleID
LEFT JOIN PortalLocalization ON PortalLocalization.PortalID = tblEmailBlackList.PortalID AND PortalLocalization.CultureCode = 'sl-SI'
WHERE Email = @testEmail
AND tblEmailBlackList.PortalID >= 0
UNION
SELECT DISTINCT PortalLocalization.PortalName
FROM tblEmailBlackList
LEFT JOIN vw_TabModules ON vw_TabModules.ModuleID = tblEmailBlackList.ModuleID
LEFT JOIN PortalLocalization ON PortalLocalization.PortalID = vw_TabModules.PortalID AND PortalLocalization.CultureCode = 'sl-SI'
WHERE Email = @testEmail
AND tblEmailBlackList.PortalID = -1)
ELSE 'Ne' END
AS LocalBlockList
FROM LiveCampaign_SubscriberList_Email
我在这里遇到的问题是,在代码中添加循环时出现错误,但是如果我单独运行循环,它将起作用。我在WHILE附近得到错误的语法,并且无法绑定多部分标识符“ LiveCampaign_SubscriberList_Email.Email”。
答案 0 :(得分:0)
您不能在SELECT语句中放置“ WHILE”。
尝试在SELECT之前处理数据,也许在临时表中。