用于获取多个列和多个条件的SQL查询

时间:2014-04-08 08:45:28

标签: sql

我正在尝试编写一个查询,该查询将根据多个条件显示多个表中的列。我尝试使用join语句但返回一些错误。然后我用基本方法写它。

找到下面的表格布局:

表AA
A | C | ID | st_aa |

表BB
C | ç| st_bb |

表CC
ç| st_cc |

表OO
ID | st_oo |

总共有五张桌子。

  • AA,BB,CC,OO,HH

  • AA和BB将与常用值相关联 - b

  • BB和CC将与常用值相关联 - c
  • AA和OO将与公共值 - id
  • 相关联

OO中的一条记录可以在AA中有多条记录,即OO到AA的关系是1..n

我想列出AA BB CC& amp; OO

  • 在AA中的第一个cdn - id将从最近的条目中列出。

  • 在上述结果中,我可以在CC上获得AA记录

最终结果如下:

AA.a, AA.st_aa, BB.b, BB.st_bb, CC.c, CC.st_cc, OO.id, OO.st_OO

PS:无法发布图片

尝试查询:

 select AA.a, AA.st_aa, BB.b, BB.st_bb, CC.c, CC.st_cc, 
from AA, BB, CC
inner join BB ON BB.b=AA.b
inner join CC on CC.c=BB.c
where OO.i in (select OO.i from AA group by OO.i having count(*)>0) order by OO.i desc

第二个:

select AA.a, AA.st_aa, BB.b, BB.st_bb, CC.c, CC.st_cc, OO.i, OO.st_oo
from AA, BB, CC, OO
where AA.a in (select AA.i from AA where AA.i in (select AA.in from AA group by AA.i having count (*) > 0)) AND (AA.b=BB.b AND BB.c=CC.c) order by OO.i desc

1 个答案:

答案 0 :(得分:0)

以下是声明:获取AA的最大ID,假设这是最后输入的AA。然后得到它的OO,OO的AA和他们的BB和CC:

select AA.a, AA.st_aa, BB.b, BB.st_bb, CC.c, CC.st_cc, OO.i, OO.st_oo
from OO 
inner join AA on AA.i = OO.i
inner join BB on BB.b = AA.b
inner join CC on CC.c = BB.c
where OO.i = (select max(i) from AA);

或者从OO获取ID(由于记录较少,应该更快):

select AA.a, AA.st_aa, BB.b, BB.st_bb, CC.c, CC.st_cc, OO.i, OO.st_oo
from OO 
inner join AA on AA.i = OO.i
inner join BB on BB.b = AA.b
inner join CC on CC.c = BB.c
where OO.i = (select max(i) from OO);

编辑:考虑到这一点,上面的两个陈述实际上都在寻找最新的OO条目。如果以后可以将AA添加到OO,则最新的AA条目可以导致除最新的OO条目之外的OO。所以这是更正的声明:

select AA.a, AA.st_aa, BB.b, BB.st_bb, CC.c, CC.st_cc, OO.i, OO.st_oo
from OO 
inner join AA on AA.i = OO.i
inner join BB on BB.b = AA.b
inner join CC on CC.c = BB.c
where OO.i = 
(
  select latest_AA.i 
  from AA latest_AA 
  where latest_AA.id_AA = (select max(all_AA.id_AA) from AA all_AA)
);

我还添加了表别名,并将它们作为限定符添加到内部选择中,以确保不会再次使用相同的表和列名来混淆dbms。