SQL 在 where 语句中使用选定的值
SQL use selected values in where statement
我使用了 2 个 SQL 命令。一是得到一些参考值,二是用它来过滤。第一个命令的结果在第二个命令中用作:FINISH_TIME 和:START_TIME。
select FINISHED, STARTED from table
where id = :ID
select * from table
where (FINISHED <= :FINISH_TIME
and
FINISHED >= :START_TIME)
or
(STARTED <= :FINISH_TIME
and
STARTED >= :START_TIME)
or
(STARTED <= :START_TIME
and
FINISHED >= :FINISH_TIME
)
我想结合这两个命令,这样我就不必手动将参考值复制到第二个命令。
我找到了这样的解决方案:
FINISHED <= (select FINISHED from table where id = :ID)
但这是多余的。有没有更好的方法来做到这一点,比如将搜索到的值用作变量?
感谢您的帮助!
您可以使用 CTE 做到这一点
with TQ as
(
select FINISHED, STARTED from table
where id = :ID
)
select *
from Table1 T1
inner join TQ
on ((T1.FINISHED <= TQ.FINISHED
and T1.FINISHED >= TQ.STARTED)
or ...
你可能只用一个 select.
就可以得到时间范围重叠的记录
select t.*
from yourtable t
inner join (
select id, finished, started
from yourtable
where id = :id
) s
on ( t.finished >= s.started
and t.started <= s.finished
and t.started <= t.finished
--and t.id <> s.id
);
我使用了 2 个 SQL 命令。一是得到一些参考值,二是用它来过滤。第一个命令的结果在第二个命令中用作:FINISH_TIME 和:START_TIME。
select FINISHED, STARTED from table
where id = :ID
select * from table
where (FINISHED <= :FINISH_TIME
and
FINISHED >= :START_TIME)
or
(STARTED <= :FINISH_TIME
and
STARTED >= :START_TIME)
or
(STARTED <= :START_TIME
and
FINISHED >= :FINISH_TIME
)
我想结合这两个命令,这样我就不必手动将参考值复制到第二个命令。
我找到了这样的解决方案:
FINISHED <= (select FINISHED from table where id = :ID)
但这是多余的。有没有更好的方法来做到这一点,比如将搜索到的值用作变量?
感谢您的帮助!
您可以使用 CTE 做到这一点
with TQ as
(
select FINISHED, STARTED from table
where id = :ID
)
select *
from Table1 T1
inner join TQ
on ((T1.FINISHED <= TQ.FINISHED
and T1.FINISHED >= TQ.STARTED)
or ...
你可能只用一个 select.
就可以得到时间范围重叠的记录select t.*
from yourtable t
inner join (
select id, finished, started
from yourtable
where id = :id
) s
on ( t.finished >= s.started
and t.started <= s.finished
and t.started <= t.finished
--and t.id <> s.id
);