【问题标题】:trying to use partitioning instead of sub querys尝试使用分区而不是子查询
【发布时间】:2012-09-03 22:27:30
【问题描述】:

我有两个表,一个在我当前的系统中,其中包含当前的电子邮件,另一个是我从全球通讯簿中创建并导出了所有电子邮件地址,以及一个 BIT 值,它是主电子邮件地址和一个用户标识值。 我使用子查询编写了一个查询来查找应该更改哪些电子邮件地址,但我虽然应该能够在不使用子查询的情况下做到这一点,但不知道怎么做?

有谁知道不使用子查询如何或是否可以做得更好?

我有什么工作,但我想学习如何更好地编写 SQL。

虽然我应该能够使用 OVER (Partition BY Member_ID) 和 MAX(CAST( [primary] AS int)) 来做到这一点,但我花了几个小时试图弄清楚并没有成功。

User_Emails
{
email varchar(75)
}

eg:
User_Emails
bob@oldemail.com
sue@evenolderemail.com
jim@otheremail.com
bill@oldemail.com

...

Global_Address_Book
{
Member_ID int
primary BIT
email_address varchar(75)
}

eg:
Member_ID        | primary | email_address
1                | 1       | bob@newemail.com
1                | 0       | bob@reallyoldemail.org
1                | 0       | bob@oldemail.com
2                | 1       | sue@newemail.com
2                | 0       | sue@oldemail.com
2                | 0       | sue@reallyoldemail.org
2                | 0       | sue@evenolderemail.com
3                | 1       | bill@newemail.com
3                | 0       | bill@oldemail.com
4                | 1       | jan@alternativeemail.com

...

SELECT Changed_Email_list.email AS Old_Email, New_Email_List.email_address AS New_Email
FROM (SELECT Member_ID, email
      FROM [Database].[Global_Address_Book] INNER JOIN [Database].[User_Emails]
       ON [Global_Address_Book].[email_address] = [User_Emails].[email]) AS     
      Changed_Email_list LEFT JOIN 
      (SELECT Member_ID, email_address 
       FROM [Database].[Global_Address_Book]
       WHERE [primary] = 1) AS New_Email_List
       ON Changed_Email_list.Member_ID = New_Email_List.Member_ID

【问题讨论】:

  • to find what email addresses should change 是什么意思?为什么?要改变什么?

标签: sql data-partitioning


【解决方案1】:

我猜应该这样做

select UserEmails.Email as OldEmail,GAB.Email as NewEamil
from   UserEmailsfromAddressBook  
inner join UserEmails on UserEmails.Email=UserEmailsfromAddressBook.Email
      and isprimary =0
inner join UserEmailsfromAddressBook  GAB on GAB.memberId=UserEmailsfromAddressBook.memberID
     and GAB.isprimary=1

sqlfiddle中的测试脚本

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-09
    • 2011-08-21
    • 1970-01-01
    • 2020-03-02
    • 2021-07-31
    • 2021-10-23
    • 2011-11-15
    • 1970-01-01
    相关资源
    最近更新 更多