我有一个带有此查询的项目,但我没有收到任何内容。
Select
c.prop_table1,
(SELECT max(t.taux_table_x) FROM DB3:table_x t
WHERE month(t.date_prop_x) = month(c.prop_of_x)
AND year(t.date_prop_x) = year(c.prop_of_x)
)*1 table_x,
''||date(c.prop_of_x) Alias
FROM DB1:table_name1 d, DB1:table_name2 c, outer DB2:table_name a
WHERE
c.value_i = d.value_i AND
c.property =d.property AND
(c.num_table_name2 =a.no_dos_adh OR c.ref_cred=a.no_dos_adh) AND
c.abcd not in ('P','S')
我不知道outer
究竟在表达什么。是左/右还是完全加入?或者是别的什么?
感谢大家的帮助
答案 0 :(得分:0)
我不知道外部正在表达的是左/右或完全加入?
不能承受sql代码的语法问题,outer是左右设置的联合。在您的示例中,这是等效的
(table1,table2) union (table3)
但是你的SQL非常不完整,无法提供更具体的答案。
答案 1 :(得分:0)
看起来很像您的查询是使用(IBM)Informix SQL方言编写的。如果是这种情况,那么outer
应该是左外连接,因为它左侧有一个表(我相信右连接将是from outer tab1, tab2
)
语法早于SQL-92标准,但仍应与Informix有效(?)。
重写为标准SQL,它可能如下所示:
SELECT
c.prop_table1,
(
SELECT max(t.taux_table_x) FROM DB3:table_x t
WHERE month(t.date_prop_x) = month(c.prop_of_x)
AND year(t.date_prop_x) = year(c.prop_of_x)
)*1 table_x,
'' || date(c.prop_of_x) Alias
FROM
DB1:table_name1 d
INNER JOIN
DB1:table_name2 c ON c.value_i = d.value_i AND c.property = d.property
LEFT JOIN
DB2:table_name a ON (c.num_table_name2 = a.no_dos_adh OR c.ref_cred = a.no_dos_adh)
WHERE
c.abcd not in ('P','S')