1NF表的MySQL查询
我有一个MySQL表,其中包含大量记录(~20k),它是1NF格式的。不幸的是,将其转换为2NF及以上版本在这里不是一个选项 该表包含以下数据:1NF表的MySQL查询,mysql,Mysql,我有一个MySQL表,其中包含大量记录(~20k),它是1NF格式的。不幸的是,将其转换为2NF及以上版本在这里不是一个选项 该表包含以下数据: ClientName1 | ClientLastName1 | ClientZip1 | ... | Product1 ClientName1 | ClientLastName1 | ClientZip1 | ... | Product2 ClientName1 | ClientLastName1 | ClientZip1 | ... | Produc
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)对于每个客户端都是唯一的。
我使用了以下查询,假设表名是clients
SELECT
ClientID
FROM
clients cl
WHERE (ClientName,ClientLastname)
IN (
SELECT ClientName, ClientLastname
FROM clients
GROUP BY ClientName,ClientLastname,Product
HAVING Product IN (Product1ID)
)
首先,这个查询运行了很长时间,似乎没有终止(或者至少没有在合理的时间内终止),其次,我认为它是不正确的。在理想的情况下,我的建议是尽可能尝试规范化这个表。正如你所看到的,你有一张乱七八糟的桌子要处理 但您是否尝试过类似的方法(请参阅):
在理想的情况下,我的建议是尽可能使这个表正常化。正如你所看到的,你有一张乱七八糟的桌子要处理 但您是否尝试过类似的方法(请参阅):
select c.ClientName,
c.ClientLastName,
c.ClientZip,
c.Product
from clients c
inner join
(
select ClientName
from clients
where Product = 'Product1'
) x
on c.ClientName= x.ClientName