Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
1NF表的MySQL查询_Mysql - Fatal编程技术网

1NF表的MySQL查询

1NF表的MySQL查询,mysql,Mysql,我有一个MySQL表,其中包含大量记录(~20k),它是1NF格式的。不幸的是,将其转换为2NF及以上版本在这里不是一个选项 该表包含以下数据: ClientName1 | ClientLastName1 | ClientZip1 | ... | Product1 ClientName1 | ClientLastName1 | ClientZip1 | ... | Product2 ClientName1 | ClientLastName1 | ClientZip1 | ... | Produc

我有一个MySQL表,其中包含大量记录(~20k),它是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)对于每个客户端都是唯一的。 我使用了以下查询,假设表名是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