0

感谢@Ed Gibbs,我设法解决了我在这个案例中的第一个问题(选择重复并保留最旧的(不基于 ID)

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

我有两个表,没有重复的“域”和包含重复的“电子邮件”。在第一个表中,我有一个名为“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 的关联外键,所以我想删除它。

这是所需的表:

| 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           |

如何在没有错误记录的情况下选择这些数据?我认为问题的关键是连接/子字符串,但我不知道该怎么做。

谢谢你的帮助。

4

1 回答 1

0

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

SELECT email.* FROM email 
JOIN domain ON email.foreign_key = domain.foreign_key
               AND substring_index( email.email, '@', -1 ) = domain.domain
于 2013-05-28T22:25:55.213 回答