SQL将两个表连接在一起,其中值在两行之间,并且您获得第一行

时间:2013-03-26 09:45:32

标签: sql oracle

表LSF

ID  LID     FV      TYPE            
28  22      1       INCREMENTAL     
29  22      5       FULL            

表LFG

ID  WHAT    WHERE   TYPE
22  V1      4444    WHITE   

ID是主键,在两个表上都是SEQUENCE。

现在我想连接这两个表

SELECT LFG.* FROM LSF sf, LFG fg WHERE sf.LID = fg.ID AND ...

我想从LSF表中获取第一行。但是空的。

如果SELECT语句中的sf.FV为1,2,3或4,则返回第一行,如果为5或更多,则返回表LSF的第2行。如何写这样的选择?

编辑:

我想要什么?

在表格LSF中,FV表示从什么时候是INCREMENTAL或FULL。如果我有版本1是INCREMENTAl,版本2或3或4是相同的。但如果我有版本5或更多是完全。

现在我的问题是我没有将每个版本存储在表格中我只是从这里说是INCREMENTAL而且从这里是完整的。我的问题是如何为版本3编写一个select语句,如何知道这是从1到5,这意味着INCREMENTAL。

5 个答案:

答案 0 :(得分:1)

SELECT FG.* FROM LSF sf, LFG fg WHERE sf.LID = fg.ID AND sf.fv = (SELECT MAX(fv) FROM LSF WHERE fv<=3)

答案 1 :(得分:0)

给它一个镜头,看看你是否得到你想要的东西。它应该返回最新版本匹配LID,其中为FV设置了1,2,3或4。

SELECT LFG.* 
FROM LSF sf, LFG fg 
WHERE sf.LID = fg.ID 
AND sf.FV >= 1 
AND sf.FV < 5
ORDER BY sf.FV DESC;

答案 2 :(得分:0)

尝试此查询

SELECT 
  b.*, a.* 
FROM 
  LSF ls,
  LFG b, 
  (SELECT 
     lid, 
     min(ID) as id 
  FROM 
     LSF 
  GROUP BY 
     lid) a
WHERE 
  a.lid = b.id AND a.id = ls.id;

答案 3 :(得分:0)

试试这个:)

SELECT LFG.* 
FROM LSF sf, LFG fg 
WHERE sf.LID = fg.ID 
AND sf.Type='INCREMENTAL'
ORDER BY sf.Type DESC;

答案 4 :(得分:0)

...and somehow include sf.FV=3

  SELECT LFG.* FROM LSF sf, LFG fg WHERE sf.LID = fg.ID AND ...
   and I want to get first row from LSF table. But is empty.

从联接中涉及的表中选择您想要单独的列。

         select t1.someDate, t1.description, t2.blahblah, t2.someOtherColumn
         from 
         foo as T1
         inner join widget as T2
         on T1.orange = T2.banana