我正在尝试编写一个查询,该查询将根据多个条件显示多个表中的列。我尝试使用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
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
答案 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。