任何人都可以帮我理解这个查询?

时间:2012-10-25 10:22:15

标签: sql hibernate hql

任何人都可以帮我理解这个查询吗? mktpgmvhclxref.mktpgmvhclxrefId.mktgPgm部分主要是。通常它是table_name.columnName,但这里的格式似乎不同

SELECT mktpgmvhclxref.mktpgmvhclxrefid.mktgpgm, 
       mktpgm.mktgpgm, 
       mktpgmvhclxref.cmpgn, 
       campaign.cmpgndescription, 
       mktpgmvhclxref.mktpgmvhclxrefid.vhcl, 
       vhclhierarchy.modname, 
       mktpgmvhclxref.mktpgmvhclxrefid.modyr, 
       mktpgmvhclxref.userinsrt, 
       mktpgmvhclxref.rowinsrt 
FROM   mktpgmvhclxref mktpgmvhclxref, 
       mktpgm mktpgm, 
       vhclhierarchy vhclHierarchy, 
       campaign campaign 
WHERE  mktpgmvhclxref.mktpgmvhclxrefid.mktgpgm = mktpgm.idmktgpgm 
       AND mktpgmvhclxref.cmpgn = campaign.campaignid 
       AND mktpgmvhclxref.mktpgmvhclxrefid.vhcl = vhclhierarchy.vhcl 

3 个答案:

答案 0 :(得分:4)

通常,第一个标识符是架构/数据库名称,具体取决于您的数据库:

[schema].[table].[column]

在大多数数据库中,[schema][table]限定符是可选的,如果[column]名称是明确的。

但是,在您的情况下,我怀疑这是实际情况,因为mktpgmvhclxrefFROM子句中的表。例如,Oracle也知道用户定义的类型(UDT,OBJECT类型)。所以我猜:

mktpgmvhclxref.mktpgmvhclxrefid.mktgpgm

对应

mktpgmvhclxref   = table
mktpgmvhclxrefid = column
mktgpgm          = UDT attribute

如果你使用的是Oracle,你可以找到你的UDT:

select * 
from all_type_attrs 
where (owner, type_name) = ((
  select data_type_owner, data_type
  from all_tab_cols
  where table_name = 'MKTPGMVHCLXREF'
  and column_name = 'MKTPGMVHCLXREFID'
))
order by attr_no

答案 1 :(得分:1)

mktpgmvhclxref.mktpgmvhclxrefId.mktgPgm
[--Schema----].[----table-----].[Column]

答案 2 :(得分:1)

我得到了我的问题的答案。 与hibernate映射有关。 第二个字段实际上是表的复合键。