从特定字符串/键中选择不重复

时间:2013-05-28 21:55:59

标签: mysql select duplicates concat substr

感谢@Ed Gibbs我设法解决了我在这个案例上的第一个问题(Select duplicate and keep the oldest (not based on ID)

我现在面临一个我无法解决的新问题。

我有两个表,“域”没有重复,“email”包含重复。在第一个表中,我有一个名为“creationdate”的值,我将其用作过滤器。在第二个表中我没有任何过滤器,但有些信息可以(我认为)用作过滤器。

表域:

| domain     | value 1 | foreign_key |
|------------|---------|-------------|
| google.com | patrick | X           |
| yahoo.com  | britney | Y           |
| ebay.com   | harry   | Z           |

表格电子邮件:

| email              | value 1 | foreign_key |
|--------------------|---------|-------------|
| john@google.com    | patrick | X           |
| john@google.com    | britney | Y           |
| harry@google.com   | mary    | X           |
| mickael@google.com | jack    | X           |
| david@ebay.com     | walter  | Z           |
| alice@yahoo.com    | brian   | Y           |

正如您在第一个表格中看到的,域名google.com由X foreign_key处理。在电子邮件表中,记录“john @ google.com,patrick,X”和“harry @ google.com,mary,X”都很好,因为它们与正确的foreign_key相匹配。问题是像“john @ google.com,britney,Y”这样的记录,Y不是域google.com的关联foreign_key所以我想将其删除。

这是理想的表格:

| email              | value 1 | foreign_key |
|--------------------|---------|-------------|
| john@google.com    | patrick | X           |
| harry@google.com   | mary    | X           |
| mickael@google.com | jack    | X           |
| david@ebay.com     | walter  | Z           |
| alice@yahoo.com    | brian   | Y           |

如何在没有错误记录的情况下选择这些数据?我认为问题的关键是concat / substring但我无法想象如何去做。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

要从正确的电子邮件中获取域名,您可以使用substring_index()功能,并使用基于外键和域匹配的简单连接。

SELECT email.* FROM email 
JOIN domain ON email.foreign_key = domain.foreign_key
               AND substring_index( email.email, '@', -1 ) = domain.domain