pessoal, possuo um arquivo chamado sqlMap.xml onde tenho os meus selects e resultMaps e uma desssas querys possui um caracter que até então eu nunca tinha visto e não sei para que serve, é o sinal de adição (+). Segue:
<select id="getProductsAndRelatedByRecordType" resultMap="productsAndRelatedMap">
SELECT P.PRODUCT_ID,
P.PRODUCT_NUMBER,
P.DESCRIPTION,
P.BUSINESS,
P.RECORD_TYPE,
PA.PRODUCT_ID as PRODUCT_ATTRIBUTE_PRODUCT_ID,
A.ATTRIBUTE_ID as ATTRIBUTE_ID,
A.NAME as ATTRIBUTE_NAME,
A.DESCRIPTION as ATTRIBUTE_DESCRIPTION,
PA.VALUE as ATTRIBUTE_VALUE,
PA.POSITION as ATTRIBUTE_POSITION,
PA.PRODUCT_ATTRIBUTE_ID,
C.COPY_ID,
C.COPY_TYPE_ID,
C.COPY
FROM products p,
copy c,
product_attributes pa,
attributes a
WHERE p.product_id =c.product_id(+)
<isNotEmpty property="search">AND p.record_type = #search#</isNotEmpty>
AND p.product_id = pa.product_id(+)
AND pa.attribute_id = a.attribute_id
</select>
Eu acho que nesse caso o melhor eh fazer um select em cada tabela com os mesmos critérios de pesquisa e verificar o retorno. O join serve para trazer dados em uma tabela mesmo que não existam dados correspondentes na outra. Se você ficar com dúvidas dá uma pesquisada sobre o uso do Join que vai te ajudar mais nessa situação.
A pergunta está respondida mas acrescento algo. Essa sintaxe é meio confusa, acho que o código fica mais claro se usar o comando left outer join na cláusula from.
É a sintaxe antiga do Oracle, do tempo em que o pessoal ainda não havia padronizado a cláusula JOIN. Muita gente ainda prefere a sintaxe antiga (em particular, eu acho mais clara, mas é porque sou um cara antigo, do tempo em que as teclas de função ficavam no lado esquerdo do teclado, em vez de ficarem em cima.)
[quote=jmountain]pessoal, possuo um arquivo chamado sqlMap.xml onde tenho os meus selects e resultMaps e uma desssas querys possui um caracter que até então eu nunca tinha visto e não sei para que serve, é o sinal de adição (+). Segue:
<select id="getProductsAndRelatedByRecordType" resultMap="productsAndRelatedMap">
SELECT P.PRODUCT_ID,
P.PRODUCT_NUMBER,
P.DESCRIPTION,
P.BUSINESS,
P.RECORD_TYPE,
PA.PRODUCT_ID as PRODUCT_ATTRIBUTE_PRODUCT_ID,
A.ATTRIBUTE_ID as ATTRIBUTE_ID,
A.NAME as ATTRIBUTE_NAME,
A.DESCRIPTION as ATTRIBUTE_DESCRIPTION,
PA.VALUE as ATTRIBUTE_VALUE,
PA.POSITION as ATTRIBUTE_POSITION,
PA.PRODUCT_ATTRIBUTE_ID,
C.COPY_ID,
C.COPY_TYPE_ID,
C.COPY
FROM products p,
copy c,
product_attributes pa,
attributes a
WHERE p.product_id =c.product_id(+)
<isNotEmpty property="search">AND p.record_type = #search#</isNotEmpty>
AND p.product_id = pa.product_id(+)
AND pa.attribute_id = a.attribute_id
</select>