Sql 如何在一个查询中执行此查询?

Sql 如何在一个查询中执行此查询?,sql,Sql,我不知道我想做的是否可能,但我很好奇 我有一张这样的时间表 timeTable --------- _id date 我有另一个表,其中存储了timeinfo,它是时间表的外键 myTable ------- action date_id 现在,我想做的是用下个月同一日期的id更新date_id UPDATE myTable SET date_id = (SELECT date + interval '1 month' FROM timeTable INNER JOIN myTabe ON

我不知道我想做的是否可能,但我很好奇

我有一张这样的时间表

timeTable
---------
_id
date
我有另一个表,其中存储了timeinfo,它是时间表的外键

myTable
-------
action
date_id
现在,我想做的是用下个月同一日期的id更新date_id

UPDATE myTable
SET date_id =  (SELECT date + interval '1 month' FROM timeTable INNER JOIN myTabe ON _id = date_id)
;
我知道这个查询无法工作,因为查询返回的日期确实需要uuid

我的问题:是否可以通过一个查询而不使用另一个子查询来检索下个月同一日期的日期id?这是我真正的疑问,我不知道我怎么做。有什么想法吗

SELECT date + interval '1 month' FROM dimtime INNER JOIN roadmap ON _id = date_id

也许是这样的:

已编辑

UPDATE myTable t1
SET t1.date_id = (SELECT t2._id FROM timeTable t2 WHERE t2.date = (SELECT t3.date + interval '1 month' FROM timeTable t3 WHERE t3._id  = t1.date_id));

这是一个令人讨厌的攻击,但是如果您的RDBMS支持整数和日期数据类型之间的确定性转换,那么有一种方法可以做到这一点,而不需要任何子查询——但几乎可以肯定的是,它需要对现有数据进行更改

解决方案要求使用日期的整数表示形式作为
时间表
中的键(而不是任意指定的值)。如果执行此操作,则可以执行日期计算,而无需从
时间表
中查找日期值。这样就不需要在查询中包含
时间表
(除非您需要验证新日期是否存在)。在这种情况下,查询的伪SQL将变成:

UPDATE myTable
SET date_id =  to_int(to_date(date_id) + interval `1 month`))
;
如果您的RDBMS中隐含了int-date转换,那么它会变得更短:

UPDATE myTable
SET date_id =  date_id + interval `1 month`
;

但是,如果您可以选择实施此设计,您最好放弃链接
时间表
并在目标表中存储本机日期类型,而不是整数FK。

恐怕您必须使用子查询来获取id。为什么不使用子查询呢?我不介意我正在做的事情。我只是想,因为+interval'1 month'是我知道可以欺骗查询的东西。这个问题只是出于好奇。您的查询列出了您没有描述的表的名称。请编辑你的问题,我真的不明白你想做什么。@maksymko:对不起,这是个打字错误。我只是编辑了我的问题。这行得通,但那不是我要问的。我要求hon在没有第二个子查询的情况下执行此操作。这里你的解决方案使用了第二个子问题啊,对不起,很明显我没有充分阅读你的问题。我不知道还有别的办法。