Get cell value and use it in an INSERT statement (MS ACCESS)
我想使用来自不同表的值插入一条记录
仅作说明:
1 2
| INSERT INTO tbl1
VALUES([value1], [value2], NOW()) |
-
value1是一个数字,来自另一个表中随机行中的单元格
-
value2是来自另一个表中随机行中的单元格的另一个数字
这是我要尝试的方法:
1 2
| INSERT INTO transactions(itemid, userid, tdate)
VALUES((SELECT TOP 1 ID FROM items ORDER BY RND(ID)), (SELECT TOP 1 ID FROM users ORDER BY RND(ID)), (NOW())) |
但这会引发错误:
Query input must contain at least one table or query
任何帮助将不胜感激。
谢谢!
- 这怎么不起作用?如果要插入文本字段,为什么要使用日期/时间功能。
-
@GordonLinoff我的意思是将当前日期用作第三个参数。抱歉,示例不一致。我现在更新问题。
-
添加表的结构。这将告诉我们您的tdate列是声明为date还是text。另外,"不这样做"是什么意思?您是否有错误消息或不正确的数据插入?
-
@ThomasG问题已更新
-
您在哪种情况下使用此SQL?查询对象?
-
@trincot现在,我只是在MS Access中对其进行测试,但我计划从vb.net中的Windows窗体应用程序执行此查询
-
您想要SELECT TOP 1 ID FROM items给您什么?等于Min(ID)吗?
-
@HansUp这将为我提供表中第一个记录(前1个)的" ID"列的值。没问题。这很好
-
@Rian查找您信任的数据库专家。问他或她在没有ORDER BY的情况下SELECT TOP 1是否可靠
-
@Rian您可能需要ORDER BY来保证有关您返回哪个ID的任何信息。这一切似乎都是个坏主意。
-
@HansUp对不起。我认为ORDER BY部分只会使问题复杂化,因此没有包括在内。请检查更新谢谢!
-
所以现在您要随机订购它们?如果这就是您想要的,请使用Trincot的答案。您是在填充一些测试数据还是其他内容?
-
@ shawnt00是的,但是我只需要随机化来获得随机的用户ID和随机的项目ID,然后使用它们在我的"交易"表中创建一条记录。是的,我只是填充测试数据。
您可以重写语句以使用SELECT代替VALUES:
1 2 3 4 5
| INSERT INTO transactions(itemid, userid, tdate)
SELECT TOP 1 items.ID, users.ID, NOW()
FROM items, users
ORDER BY Rnd(-(1000*items.ID*users.ID)*TIME()),
items.ID, users.ID |
编辑:我添加了ORDER BY子句,这将导致更多的随机排序顺序。负值将确保某种随机性。另请参见此问题。
Edit2:扩展了ORDER BY子句,以确保TOP 1不必处理领带。
- 之所以不能使用联接,是因为我要获取商品ID的行与我要获取用户ID的行之间没有直接链接。条件也是没有必要的。谢谢你的投入
-
现在测试更新的解决方案。很快就会回复您。谢谢!
-
这将使用我试图完成的其他表中的随机用户ID和项目ID添加记录。唯一的问题是,当我尝试多次执行该命令时,有时会添加1行,有时会添加2行,有时还会添加3行。知道为什么吗?
-
@HansUp我不理解为什么存在重复和联系(假设其他表具有正确的主键)。
-
@ shawnt00我想我误入歧途,所以删除这些评论。对不起。
-
如果ORDER BY子句中的最低随机值恰好对两个记录相同,则将得到两个。我在答案中都将两个ID值添加到ORDER BY子句中。这应该(希望)排除联系。
-
@trincot那么TOP 1可以恢复联系吗?奇怪的。
-
@trincot最后更新完全有效!现在,我只需要花一些时间来研究解决方案,并找出其工作原理:)您真棒!非常感谢你
-
@trincot有一个简单的问题。为什么即使在使用TOP 1的情况下,ORDER BY子句中的最低随机值相同,我们也会得到两条记录?
-
哎呀!没关系。我想我已经从这里得到了答案:[link](msdn.microsoft.com/zh-cn/library/bb177882(v = office。?? 12).aspx)仍然感谢