Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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
MySQL-选择一行,但在处理数据后插入多行_Mysql - Fatal编程技术网

MySQL-选择一行,但在处理数据后插入多行

MySQL-选择一行,但在处理数据后插入多行,mysql,Mysql,我在一家网店中有3张桌子: jos_vm_category category_id | distributor_code | ... jos_vm_product product_id | product_sku | ... jos_vm_product_category_xref category_id | product_id 我将新数据上传到一个临时表: temp_product_traversal product_sku | category_distr

我在一家网店中有3张桌子:

jos_vm_category
    category_id | distributor_code | ...
jos_vm_product
    product_id | product_sku | ...
jos_vm_product_category_xref
    category_id | product_id
我将新数据上传到一个临时表:

temp_product_traversal
    product_sku | category_distributor_code | ...
我必须刷新jos_vm_product_category_外部参照表

jos_vm_category.distributor_代码与temp_product_traversal.category_distributor_代码相同,两个表中的长度都可以是3,6,9个字符。3个字符长的代码是主要类别,6,9个字符长的代码是子类别的代码。我必须把产品分为它的子类别和每一个超级类别。例如: 如果代码为VGAATIPCE,则我必须将产品插入3个类别:

VGAATIPCE, VGAATI, VGA
因此,在这种情况下,我们需要在jos\u vm\u product\u category\u xref中新增3行


是否可以通过一个mysql请求将3个新行插入jos_vm_product_category_外部参照?

联接表达式可以在许多方面模拟WHERE表达式。在你的加入中加入几个ORs,你应该能够处理你正在寻找的东西

INSERT jos_vm_product_category_xref(category_id, product_id)
SELECT c.category_id, p.product_id from temp_product_traversal trav
    JOIN jos_vm_product p ON trav.product_sku = p.product_sku
    JOIN jos_vm_category c ON LEFT(trav.category_distributor_code,3) = c.distributor_code 
        OR LEFT(trav.category_distributor_code,6) = c.distributor_code 
        OR trav.category_distributor_code = c.distributor_code

我对union还有另一个解决方案:

INSERT jos_vm_product_category_xref(product_id,category_id)
SELECT p.product_id,c.category_id
FROM 
    (
        (
            SELECT product_sku,LEFT(category_distributor_code,9) AS distributor_code
            FROM temp_product_traversal
        )
        UNION
        (
            SELECT product_sku,LEFT(category_distributor_code,6) AS distributor_code
            FROM temp_product_traversal
        )
        UNION
        (
            SELECT product_sku,LEFT(category_distributor_code,3) AS distributor_code
            FROM temp_product_traversal
        )
    ) AS trav,
    jos_vm_product AS p,
    jos_vm_category AS c
WHERE
    p.product_sku=trav.product_sku
AND
    c.distributor_code=trav.category_distributor_code