insert语句添加多个相同的行

lmvvr0a8  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(410)

我使用webservice在数据库中添加值,通常我的查询应该只添加一行,但实际上它有多个相同的行。
这是我的两张table:


我的问题:

INSERT INTO Details 
(SecurityKey, Name, URL, DateLog, Level, Message, Username, ServerName, Port, ServerAdress, RemoteAdress, Logger, Exception, ApplicationID) 
SELECT  
@SecurityKey, @Name, @URL, @DateLog, @Level, @Message, @Username,@ServerName, @Port, @ServerAdress, @RemoteAdress, @Logger, @Exception, @ApplicationID
FROM Details D
INNER JOIN Application A ON @SecurityKey = A.SecurityKey AND @ApplicationID = A.ID

以及@applicationid=14和@securitykey=“shsfndoipm”的Web服务:

{
  "DateLog": "27/02/12",
  "Level": "danger",
  "Message": "ytry",
  "Username": "ghth",
  "ServerName": "zrzrzer",
  "Port": "80",
  "ServerAdress": "36zr",
  "RemoteAdress": "12z",
  "Logger": "rg",
  "Exception": "zr",
  "ApplicationID": 14,
  "Name": "zr",
  "SecurityKey": "shSfnDOIPM",
  "URL": "wwww",
}

正常情况下,我的查询应该只对一行进行排序,但正如您在“详细信息”图片中看到的,它会创建许多行。。。
谢谢你的帮助

vuv7lop3

vuv7lop31#

您正在使用insert into select查询,但是您没有发出任何连接来连接这两个表(隐式或显式)。当使用影响多个表的select查询时,需要n-1个where语句来连接它们(隐式连接),或者n-1个这样的连接,以避免笛卡尔积。笛卡尔积=“多重插入”在您的情况下,由于 INSERT INTO... SELECT 我想您需要一个内部连接,并建议您一般避免隐式连接。
例如,编辑查询:

INSERT INTO Details 
(SecurityKey, Name, URL, DateLog, Level, Message, Username, ServerName, Port, ServerAdress, RemoteAdress, Logger, Exception, ApplicationID) 
SELECT  
@SecurityKey, @Name, @URL, @DateLog, @Level, @Message, @Username,@ServerName, @Port, @ServerAdress, @RemoteAdress, @Logger, @Exception, @ApplicationID
FROM Details D
INNER JOIN Application A ON D.ApplicationID = A.ID 
WHERE A.SecurityKey = @SecurityKey AND A.ID = @ApplicationID

请注意,我放置了内部连接,并将之前的“连接”移到了where语句中。

7qhs6swi

7qhs6swi2#

看起来您在查询中引用了两个表,但没有将它们连接在一起。可能在这个过程中得到笛卡尔积。

相关问题