gpt4 book ai didi

mysql - SQL使用join将数据传输到另一个表

转载 作者:行者123 更新时间:2023-11-29 11:54:06 25 4
gpt4 key购买 nike

我有旧 table 商品(vendorId-FK、ManufacturerId(不是 FK))、供应商(PK-VendorId int),制造商(PK-ManufacturerId int)需要将数据传输到新数据库,它可以从供应商传输数据,但从制造商仅传输 30000 个(其中 oldManufacturerId 不为空),其他 5000 个不传输。你知道我做错了什么吗?

新 table 制造商 ( OldManufacturerID int, newManufacturerId Uniqueidentifier默认newid(), 制造商名称 varchar (100),

    )

新表项 (... 商品描述, 制造商 ID 唯一标识符, 供应商 ID 唯一标识符 )

INSERT INTO dbo.Item
( ...
ItemDescription,
ManufacturerId ,
VendorId
)
SELECT
...
itemDescription,
m.ManufacturerId ,
v.VendorId
FROM OldSqlDatabase.dbo.tbl_Items i
JOIN NewSqlDatabase.dbo.Vendor v ON ISNULL(i.vendor_id, '') = ISNULL(v.SourceVendorID, '')
JOIN NewSqlDatabase.dbo.Manufacturer m ON ISNULL(i.manufacturer_id, '') = ISNULL(m.SourceManufacturerID, '')

我刚刚传输了一个数据,因为这个表没有任何关系,新的ManufacturerId有默认的newid(),并且我想在新的项目表中使用这个新的ID插入 dbo.Manufacturer ( 旧制造商 ID , 生产商名称 , )选择制造商_id ,生产商名称 ,来自旧制造商

最佳答案

您可能需要使用 LEFT JOIN 获取没有要连接的值(空值)的记录。 LEFT JOIN 将允许您从连接中指定的第一个表中选择所有记录,即使连接中的第二个表中没有可用的匹配记录。

这还允许您删除连接定义中的 ISNULL() 内容。它们的性能会非常差,因为它们无法使用索引。

我建议类似:

INSERT INTO dbo.Item
( ...
ItemDescription,
ManufacturerId ,
VendorId
)
SELECT
...
itemDescription,
m.ManufacturerId ,
v.VendorId
FROM OldSqlDatabase.dbo.tbl_Items i
LEFT JOIN NewSqlDatabase.dbo.Vendor v
ON i.vendor_id = v.SourceVendorID
LEFT JOIN NewSqlDatabase.dbo.Manufacturer m
ON i.manufacturer_id = m.SourceManufacturerID

关于mysql - SQL使用join将数据传输到另一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33504264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com