我在查询中有一个WHERE
子句,需要查看相关表中的最新条目是否符合某些条件。但是,由于各种原因,我无法将顶级查询的PK直接注入到子句中。
有没有办法重写以下查询以依赖外部别名(即make ALIAS.pk工作)? foo有一个复合主键。
(SELECT CASE WHEN EXISTS (
SELECT * FROM (
SELECT n.val1, n.val2 FROM (
SELECT * FROM foo f
WHERE f.val0 = 100 AND f.outerid = ALIAS.pk
ORDER BY f.date DESC
) n
WHERE n.rownum = 1
) t
WHERE t.val1 = 1 AND t.val2 = 2
) THEN 1 ELSE 0 END FROM dual) = 1
编辑:外表(栏):
id name city
1 Bob London
2 Mike Atlanta
3 Susan Toronto
内表(foo):
outerid date val1 val2 val100 fk1 fk2 fk3
1 2014-11-11 1 2 100 11 523 15
1 2014-11-11 1 2 101 14 12 87
1 2014-11-10 1 2 100 17 1667 12
2 2014-11-11 1 1 100 91 12 188
foo的主键是fk1..3上的复合键。 所以我需要的是从foo中选择与某个用户相对应的最新条目并检查它是否具有某些特征。
编辑2:
SELECT CASE WHEN ({inner query})=1 THEN 1 ELSE 0 END WHERE id = 1
应返回" 1" SELECT SELECT CASE WHEN ({inner query})=1 THEN 1 ELSE 0 END WHERE id = 2
应返回" 0"。
答案 0 :(得分:1)
这可能会为您提供所需的输出:
SELECT b.name
FROM bar b
INNER JOIN
(SELECT DISTINCT
f.outerid
FROM
(SELECT f.outerid
, f.val1
, f.val2
, f.date
, max(f.date) OVER
(PARTITION BY f.outerid
ORDER BY f.date) max_date
FROM foo f
WHERE f.val0 = 100) f
WHERE f.date = f.max_date
AND f.val1 = 1
AND f.val2 = 2) f
ON (f.outerid = b.id)