古いeコマースストアの「関連製品」であると思われる古いデータテーブル(MS ACCESSにあります)があります。私は新しい店のためにこれらの関連製品を回収しようとしています。
次のフィールド/データサンプルを含むデータセット:
+---------+------------+-----------------+
| GroupID | ProductId | Sku |
+---------+------------+-----------------+
| 1001 | 12473 | C2S-44682-AMB |
| 1001 | 3628 | C-43604-1 |
+---------+------------+-----------------+
「groupID」は関連付けです。同じグループ内のproductIdは相互に関連付けられています。したがって、これら2つの製品は両方ともGroupId 1001に属しているため、相互に関連しています。合計で約3500行のデータがあります。
必要なのは、これらの関連製品を新しいテーブルにエクスポートして、新しいストアにインポートし、関連関係を維持できるようにすることです。新しいデータには、異なるフォーマットの構造が必要です。
ParentId(最初の製品)、ChildId(2番目の関連製品)つまり、上記の例を使用すると、次のようになります。
12473, 3628 (the first product should display the second)
3628, 12473 (the second product should display the first
これらの新しいレコードを見つけてループスルーし、新しいDBに書き込むための正しいSQLクエリを作成する方法がわかりません。
おそらく「For / Each」ループだと思いましたが、参照を探すときに、適切なコンテキストを見つけることができなかったようです(PHPの例はたくさんありますが、PHPは得意ではなく、SQLが必要だと思います)。これを行う方法)。SQLの「having」句で集計を実行できますが、これも私には正しくないようです。
進め方について何か提案はありますか?
ループは必要ありません...自己結合するだけです。より詳細な例として、テストデータにいくつかのレコードを追加したことに注意してください。
declare @oldTable table (GroupID int, ProductId int, Sku varchar(64))
insert into @oldTable
values
(1001,12473,'C2S-44682-AMB'),
(1001,3628,'C-43604-1'),
(1001,4896,'C-43-558604-1'),
(1099,4458,'C-xxx-1'),
(1099,5217,'C-asbf3-1')
select
t1.ProductId as parent
,t2.ProductId as Child
from
@oldTable t1
left join
@oldTable t2 on
t1.GroupID = t2.GroupID
and t1.ProductId <> t2.ProductId
戻り値
+--------+-------+
| parent | Child |
+--------+-------+
| 12473 | 3628 |
| 12473 | 4896 |
| 3628 | 12473 |
| 3628 | 4896 |
| 4896 | 12473 |
| 4896 | 3628 |
| 4458 | 5217 |
| 5217 | 4458 |
+--------+-------+
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加