一句话有可能吗?
我的数据库中有多个表。
使用此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/