将一个表中的数据集与另一个表

时间:2016-11-27 15:44:36

标签: sql sql-server comparison

我已经使用JOIN和EXISTS和ISNULL绕圈了。我无法理解这一点,而且我已经完成了数百个主题。

页面中的记录可以推动各个零售网页的输出。此表中的字段确定显示的项目:

  • PageID INT
  • 类别VARCHAR(30)
  • Color VARCHAR(10)
  • 尺寸VARCHAR(10)
  • OnSale BIT

e.g。

  • PageID = 201
  • 类别=鞋子
  • 颜色=红色
  • 尺寸=大
  • OnSale = 1

我需要将这些字段与 Accounts_Emails 中具有相同名称的字段进行比较。

  • fk_AccountID INT
  • 类别VARCHAR(30)
  • Color VARCHAR(10)
  • 尺寸VARCHAR(10)
  • OnSale BIT

此表允许用户保存电子邮件简报的选项。如果他们想要发送更多类似于当前页面上的项目,他们会点击该页面上的按钮。

我需要的是一个存储过程,用于检查该用户是否已经在Accounts_Emails记录中具有完全匹配的选项,如果没有,则使用这些选项插入新记录。

在字段中,NULL值表示ALL,因此我需要比较空值。我将PageID和AccountID传递给过程,以便我可以获取当前的Pages记录并将Accounts_Emails限制为当前用户。

这就是我所拥有的:

IF NOT EXISTS
(

SELECT 1 FROM Accounts_Emails a
JOIN Pages l on l.PageID = @PageID
WHERE
a.fk_AccountID = @AccountID AND
(ISNULL(a.Category,'NULL') = ISNULL(l.Category,'NULL')) AND
(ISNULL(a.Colour,'NULL') = ISNULL(l.Colour,'NULL')) AND
(ISNULL(a.Size,'NULL') = ISNULL(l.Size,'NULL')) AND
(ISNULL(a.OnSale,'NULL') = ISNULL(l.OnSale,'NULL'))

)

1 个答案:

答案 0 :(得分:0)

看起来你需要使用MERGE语句。使用Accounts_Emails作为TARGET。

网上有很多很好的例子。