1NFにある大量のレコード(〜20k)を含むMySQLテーブルがあります。残念ながら、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)
)
まず第一に、このクエリは何年にもわたって実行され、終了しないようです(または少なくとも妥当な時間内に)そして第二に私はそれが正しくないと思います。