一句话有可能吗?

我的数据库中有多个表。

使用此SELECT检索子SKU(又称为产品列表SKU)的数组

SELECT SKU FROM MasterSKU WHERE '4048' IN (AltSKU, SKU_1, SKU_2, SKU_3);


退货

+-------------------+
|        SKU        |
+-------------------+
| 4048              |
| 4048-SET-15       |
| 4699-4528-4048-EA |
+-------------------+


实际的SKU是4048,结果集是与该一个sku连接的所有产品列表sku。

这些SKU位于其他几个表中,由eCommerce API生成。

这是我的第二个SELECT语句,用于返回SKU的位置(通道)和相关的ItemID。

(SELECT 'store_1' as channel, SKU, ItemID  FROM Listings_store1 WHERE SKU = '4048')
    UNION
(SELECT 'store_2', SKU, ItemID  FROM Listings_store2 WHERE SKU = '4048')
    UNION
(SELECT 'store_3', SKU, ItemID  FROM Listings_store3 WHERE SKU = '4048')
    UNION
(SELECT 'store_4', SKU, ItemID  FROM Listings_store4 WHERE SKU = '4048');


这导致

+----------+-------------------+---------------+
| channel  |        SKU        |    ItemID     |
+----------+-------------------+---------------+
| store_1  | 4048              | 5654515256454 |
| store_1  | 4048-SET-15       | 5654515234536 |
| store_3  | 4699-4528-4048-EA | 5654515243553 |
+----------+-------------------+---------------+


我现在的工作方式是在PHP中将第一个SELECT语句转换为数组,然后循环执行结果以检索结果。类似于for ($i = 0; $i < $channelskucount; $i++) { $channeldetectquery = "(SELECT 'store_1' as source, SKU FROM Listings_store1 WHERE SKU = '$channelskuarray[$i]') . . .

合并这两个查询是否可能或可行?由于第一个选择语句通常充当数组,因此我在PHP中使用第二个选择语句进行循环,因此我不确定从哪里开始。

结束输出类似

+--------------+----------+-------------------+---------------+
| InventorySKU | channel  |        SKU        |    ItemID     |
+--------------+----------+-------------------+---------------+
|         4048 | store_1  | 4048              | 5654515256454 |
|         4048 | store_1  | 4048-SET-15       | 5654515234536 |
|         4048 | store_3  | 4699-4528-4048-EA | 5654515243553 |
+--------------+----------+-------------------+---------------+


任何提示/帮助真的很感激。我意识到我的第一个表没有完全标准化,但是试图完成我的第一个大数据库项目,因此我在此过程中学到了很多东西,并且学到了很多东西。

最佳答案

如果您对数据进行较小且非常需要的重组,则肯定可以[在一个查询中进行]。实际上,您的问题完全可以说明当前结构的问题。不同商店的商品清单不应每个都有自己的数据表。应该有一个“商店”表,其中包含用于标识键,商店名称,商店描述,地址等的列。然后,您将只有一个“清单”表,其中包含一个附加列,即查找(外键)关系)到“商店”表的ID键,然后是其余的所有内容(SKU,ItemID等)。应该不难做,您只需要做一次。您可以创建表并对其进行暴力破解:

INSERT into Listings (StoreID, SKU, ItemID,...)
    SELECT 1, SKU, ItemID,... FROM Listings1
INSERT into Listings (StoreID, SKU, ItemID,...)
    SELECT 2, SKU, ItemID,... FROM Listings2
...


还是以一种不可原谅的懒惰方式来做到这一点,我甚至应该严厉谴责这种方式(您绝对应该在之后再次检查您的列数据类型并添加索引):

SELECT 1 as StoreID, *
    INTO Listings
    FROM Listings1
UNION
SELECT 2, *
UNION
SELECT 3, *
UNION
SELECT 4, *
...


然后,您只需将此表联接到master_sku并存储表即可,如下所示:

DECLARE @InventorySKU as varchar(20)
SET @InventorySKU = '4084'

SELECT @InventorySKU as InventorySKU, s.StoreName as channel, l.SKU, l.ItemID
    FROM Listings l
    INNER JOIN MasterSKU ms on ms.SKU = l.SKU
    INNER JOIN Stores s on s.ID = l.StoreID
    WHERE
        ms.AltSKU LIKE '%' + @InventorySKU + '%' OR
        ms.SKU_1 LIKE '%' + @InventorySKU + '%' OR
        ms.SKU_2 LIKE '%' + @InventorySKU + '%' OR
        ms.SKU_3 LIKE '%' + @InventorySKU + '%'


我希望这有帮助。

关于mysql - 组合SELECT语句以将库存SKU阵列/列表连接到产品页面SKU,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48716449/

10-13 05:30