我有一个包含大量记录(~20k)的 MySQL 表,它在 1NF 中。不幸的是,将其转换为 2NF 及更高版本不是一个选项。
该表包含数据,例如
ClientName1 | ClientLastName1 | ClientZip1 | ... | Product1
ClientName1 | ClientLastName1 | ClientZip1 | ... | Product2
ClientName1 | ClientLastName1 | ClientZip1 | ... | Product3
ClientName2 | ClientLastName2 | ClientZip2 | ... | ProductX
ClientName3 | ClientLastName3 | ClientZip3 | ... | Product1
ClientName3 | ClientLastName3 | ClientZip3 | ... | Product2
ClientName4 | ClientLastName4 | ClientZip4 | ... | Product2
ClientName4 | ClientLastName4 | ClientZip4 | ... | Product3
我想做的是获得至少拥有Product1的客户的所有产品。所以在上面的例子中,这将是以下记录:
ClientName1 | ClientLastName1 | ClientZip1 | ... | Product1
ClientName1 | ClientLastName1 | ClientZip1 | ... | Product2
ClientName1 | ClientLastName1 | ClientZip1 | ... | Product3
ClientName3 | ClientLastName3 | ClientZip3 | ... | Product1
ClientName3 | ClientLastName3 | ClientZip3 | ... | Product2
现在让我们假设 (ClientName,ClientLastname) 对于每个客户端都是唯一的。我使用以下查询假设表名是客户端
SELECT
ClientID
FROM
clients cl
WHERE (ClientName,ClientLastname)
IN (
SELECT ClientName, ClientLastname
FROM clients
GROUP BY ClientName,ClientLastname,Product
HAVING Product IN (Product1ID)
)
首先,这个查询运行了很长时间,并且似乎没有终止(或者至少不是在合理的时间内),其次我认为它是不正确的。