糟糕的MySQL语法:表被指定两次,作为' INSERT'的目标。并作为单独的数据来源

时间:2018-06-18 19:22:18

标签: mysql sql syntax

尝试创建一个SQL查询,该查询将从另一个表的列中插入一个随机值到一个表中。

只是简单地进入我的数据库结构 - 我有一个用户表(" aUsers"),其中有一个唯一的userID主键。我还有一个用户可以在其库存中拥有的对象表(" aObjects),其中objectID作为主键。最后有一个表我称之为inInventory,它有一个相对无用的inventoryID主键,但后来是userID和objectID的值。我可以通过运行以下命令来运行查询以获取用户库存表:

select aObjects.objectID from aUsers
join aInventory on aUsers.userID = aInventory.userID 
join aObjects on aInventory.objectID = aObjects.objectID
where aUsers.userID=108 

我正在尝试运行一个查询,该查询会将随机对象插入到当前不在广告资源中的用户广告资源中。此代码成功生成了一个不在用户库存中的随机objectID:

select substring_index(group_concat(objectID order by rnd), ",", 1) 
FROM (select objectID, rand() as rnd from aObjects 
where aObjects.objectID not in 
(select aObjects.objectID from aUsers 
join aInventory on aUsers.userID = aInventory.userID 
join aObjects on aInventory.objectID = aObjects.objectID 
where aUsers.userID=108)) as newObject

但是,当我将其作为完整的插入语句运行时:

INSERT INTO aInventory set userID = 108, objectID = 
(select substring_index(group_concat(objectID order by rnd), ",", 1) 
FROM (select objectID, rand() as rnd from aObjects
where aObjects.objectID not in (select aObjects.objectID from aUsers
join aInventory on aUsers.userID = aInventory.userID 
join aObjects on aInventory.objectID = aObjects.objectID
where aUsers.userID=108)) as newObject);

我得到了"表' aInventory'被指定两次,作为' INSERT'的目标。并作为数据的单独来源"错误。显然,它不喜欢我在尝试插入该表时在select语句中指定aInventory。我在这里看到了一些类似的问题似乎只是能够重新排列选择查询以使其工作。但是,我不知道如何使用我的代码。看看是否有人有任何建议或解决方案。很抱歉这些代码块格式不佳。谢谢!

编辑:我想指出我想连续至少运行三次这个查询。已经能够使其工作一次,但通常使用的解决方案会在多次完成时导致重复随机值。

0 个答案:

没有答案