SQL产品复制增加国家及港口的问题,大神小神都来看看啊

hk207 2019-11-14 12:17:51
1、有两个表:国家表:Country(ID,ProductID,CountryName),港口表:Port(ID,CountryID,PortName)
其中Country的主键ID为自增,Port表的外键CountryID与Country的主键ID关联。


现在需要按照ProductID复制增加新的国家与港口,SQL要怎么写?如上图的数据,复制ProductID为4的国家港口,增加后结果如下图:


哪位大拿来帮忙一下,谢谢!
...全文
96 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hk207 2019-11-14
  • 打赏
  • 举报
回复
INSERT INTO #Country
SELECT 5,CountryName FROM #Country where ProductID = 4

INSERT INTO #Port
SELECT b.ID,
PortName
FROM #Port
JOIN #Country a
ON CountryID = a.ID
JOIN #Country b
ON b.CountryName = a.CountryName
WHERE b.ProductID = 5 and a.ProductID = 4;

加上ProductID = 4条件就OK了,谢谢大神。
二月十六 2019-11-14
  • 打赏
  • 举报
回复
引用 4 楼 hk207 的回复:
[quote=引用 1 楼 二月十六 的回复:]
--测试数据
if not object_id(N'Tempdb..#Country') is null
	drop table #Country
Go
Create table #Country([ID] INT IDENTITY,[ProductID] int,[CountryName] nvarchar(24))
Insert #Country
select 4,N'澳大利亚' union all
select 4,N'美国'
GO
if not object_id(N'Tempdb..#Port') is null
	drop table #Port
Go
Create table #Port([ID] INT IDENTITY,[CountryID] int,[PortName] nvarchar(24))
Insert #Port
select 1,N'悉尼' union all
select 1,N'墨尔本' union all
select 2,N'旧金山' union all
select 2,N'新奥尔良'
Go
--测试数据结束
INSERT INTO #Country
SELECT 5,CountryName FROM #Country

INSERT INTO #Port 
SELECT b.ID,
       PortName
  FROM #Port
  JOIN #Country a
    ON CountryID     = a.ID
  JOIN #Country b
    ON b.CountryName = a.CountryName
 WHERE b.ProductID = 5;

 SELECT * FROM #Country
 SELECT * FROM #Port
原始数据只有一个ProductID,如果按照你这个来运行一次得到两个ProductID,是正确的。但是如果在运行一次,就会重复了,也就是说,如果原始数据有多个ProductID,则就会重复多次。这个是因为什么原因呢?[/quote] 因为我写的ProductID是固定的5;如果有其他情况,变换ProductID生成规则即可。
hk207 2019-11-14
  • 打赏
  • 举报
回复
引用 1 楼 二月十六 的回复:
--测试数据
if not object_id(N'Tempdb..#Country') is null
drop table #Country
Go
Create table #Country([ID] INT IDENTITY,[ProductID] int,[CountryName] nvarchar(24))
Insert #Country
select 4,N'澳大利亚' union all
select 4,N'美国'
GO
if not object_id(N'Tempdb..#Port') is null
drop table #Port
Go
Create table #Port([ID] INT IDENTITY,[CountryID] int,[PortName] nvarchar(24))
Insert #Port
select 1,N'悉尼' union all
select 1,N'墨尔本' union all
select 2,N'旧金山' union all
select 2,N'新奥尔良'
Go
--测试数据结束
INSERT INTO #Country
SELECT 5,CountryName FROM #Country

INSERT INTO #Port
SELECT b.ID,
PortName
FROM #Port
JOIN #Country a
ON CountryID = a.ID
JOIN #Country b
ON b.CountryName = a.CountryName
WHERE b.ProductID = 5;

SELECT * FROM #Country
SELECT * FROM #Port




原始数据只有一个ProductID,如果按照你这个来运行一次得到两个ProductID,是正确的。但是如果在运行一次,就会重复了,也就是说,如果原始数据有多个ProductID,则就会重复多次。这个是因为什么原因呢?
RINK_1 2019-11-14
  • 打赏
  • 举报
回复
当COUNTRY表里有PRODUCTID不是4的数据时,也是只复制4的数据吗

IF OBJECT_ID(N'TEMPDB.DBO.#COUNTRY') IS NOT NULL
DROP TABLE #COUNTRY
GO

CREATE TABLE #COUNTRY
(ID INT IDENTITY(1,1),
 PRODUCT_ID INT,
 COUNTRY_NAME VARCHAR(10))

INSERT INTO #COUNTRY
SELECT 4,'AUS' UNION ALL
SELECT 4,'USA' UNION ALL
SELECT 4,'JAP' UNION ALL
SELECT 4,'IND'

GO

IF OBJECT_ID(N'TEMPDB.DBO.#PORT') IS NOT NULL
DROP TABLE #PORT
GO

CREATE TABLE #PORT
(ID INT IDENTITY(1,1),
 COUNTRY_ID VARCHAR(5),
 PORT_NAME VARCHAR(10))

INSERT INTO #PORT
SELECT '1','SYN' UNION ALL
SELECT '1','MEL' UNION ALL
SELECT '2','SFN' UNION ALL
SELECT '2','NOL' UNION ALL
SELECT '2','NYK' UNION ALL
SELECT '3','OSA' UNION ALL
SELECT '3','TYO' UNION ALL
SELECT '4','NED' UNION ALL
SELECT '4','MEM' 

GO

INSERT INTO #COUNTRY
SELECT PRODUCT_ID+1,COUNTRY_NAME 
FROM #COUNTRY WHERE PRODUCT_ID='4'

INSERT INTO #PORT
SELECT C.ID,A.PORT_NAME 
FROM #PORT A
JOIN #COUNTRY B ON A.COUNTRY_ID=B.ID
JOIN #COUNTRY C ON B.COUNTRY_NAME=C.COUNTRY_NAME
WHERE B.PRODUCT_ID='4' AND C.PRODUCT_ID=B.PRODUCT_ID+1

SELECT * FROM #PORT
独木成林_ 2019-11-14
  • 打赏
  • 举报
回复
謝邀,不是很明白按照ProductID复制增加新的国家与港口的含義,如果是需要新增國家與港口,首先要先新增對應的國家(insert into Country values('','')),然後再添加對應的港口insert into Port('','','')即可。
二月十六 2019-11-14
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#Country') is null
drop table #Country
Go
Create table #Country([ID] INT IDENTITY,[ProductID] int,[CountryName] nvarchar(24))
Insert #Country
select 4,N'澳大利亚' union all
select 4,N'美国'
GO
if not object_id(N'Tempdb..#Port') is null
drop table #Port
Go
Create table #Port([ID] INT IDENTITY,[CountryID] int,[PortName] nvarchar(24))
Insert #Port
select 1,N'悉尼' union all
select 1,N'墨尔本' union all
select 2,N'旧金山' union all
select 2,N'新奥尔良'
Go
--测试数据结束
INSERT INTO #Country
SELECT 5,CountryName FROM #Country

INSERT INTO #Port
SELECT b.ID,
PortName
FROM #Port
JOIN #Country a
ON CountryID = a.ID
JOIN #Country b
ON b.CountryName = a.CountryName
WHERE b.ProductID = 5;

SELECT * FROM #Country
SELECT * FROM #Port


22,199

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧