我一直在努力,我无法找到解决这个问题的方法。 我有两个不同的INSERT语句:
INSERT INTO `logList`(`User_ID`) SELECT `User_ID` FROM `userList` WHERE keyname='somevalue';
INSERT INTO `logList`(`ttime`) VALUES (CURRENT_TIMESTAMP);
如果我执行它们,它们当然会插入2个不同的行。如何创建仅返回一行的INSERT
?
提前谢谢。
答案 0 :(得分:3)
我将假设这是你真正想要的:
INSERT INTO logList (User_ID, ttime)
SELECT User_ID, CURRENT_TIMESTAMP
FROM userList
WHERE keyname = 'somevalue';
我怀疑你想要两个单独的行,一个用户和NULL
用于时间,另一个用NULL
用于用户和时间值。
我应该注意,您可以定义loglist
,因此ttime
默认为插入的当前时间戳。 documentation中描述了使用此类默认值。
如果你这样做,那么:
INSERT INTO logList (User_ID)
SELECT User_ID
FROM userList
WHERE keyname = 'somevalue';
始终设置ttime
。
答案 1 :(得分:1)
正如您所问,您可以在一个插入中执行此操作:
INSERT INTO `logList`(`User_ID`, `ttime`)
SELECT `User_ID`, CURRENT_TIMESTAMP
FROM `userList`
WHERE keyname='somevalue';
答案 2 :(得分:0)
你有这个命令:
INSERT INTO `logList`(`User_ID`) SELECT `User_ID` FROM `userList` WHERE keyname='somevalue';
INSERT INTO `logList`(`ttime`) VALUES (CURRENT_TIMESTAMP);
这将创建两行,并且您想要创建一行。您可以使用单个命令执行此操作:
insert into loglist(USER_ID, ttime)
select User_ID, now()
from userList
where keyname = 'somevalue';
然而,即使这是一个解决方案,它也不是一个非常优雅的解决方案。您应该alter loglist
并修改ttime
以获得default
CURRENT_TIMESTAMP
的值,然后您可以像这样简化insert
命令:
insert into loglist(USER_ID)
select User_ID
from userList
where keyname = 'somevalue';
这应该是正常的行为,因为你的loglist
表可能应该具有插入时刻的时间戳。