Criando junção com base em vários campos usando o ArcGIS Desktop?

8

Eu tenho duas classes de recursos em um geodatabase de arquivo que gostaria de ingressar com base em vários campos. Eu pesquisei neste site e no Google e tudo o que descobri foi usar a ferramenta Criar tabela de consultas. Eu tentei isso, mas continuo recebendo um erro de SQL. Meu SQL é muito ruim e tenho certeza de que estou perdendo alguma coisa.

Estou ciente de que posso criar um novo campo e concatenar os valores dos meus campos, mas gostaria de evitar isso, se possível.

Estou usando algo parecido com isto:

(Table1.Field1 = Table2.Field1) AND (Table1.Field2 = Table2.Field2) AND (Table1.Field3 = Table2.Field3)

Ao verificar a consulta, recebo um erro que diz:

There was an error with the expression. 
An Invalid SQL statement was used.
An invalid SQL statement was used. [Table1]

Além disso, se alguém tiver outra solução que não use essa ferramenta, fico feliz em saber sobre isso.

Fezter
fonte
Tente associar a Tabela 1 à Tabela 2 e, em seguida, associar a Tabela 3 ao resultado disso. Também o ajudaria se você usasse o construtor de consultas (botão [sql] na ferramenta Criar tabela de consultas) para verificar a sintaxe.
Nagytech 9/08/2012
Observe que existem apenas duas tabelas, mas três campos. Estou usando o construtor de consultas e o erro que aparece aparece quando clico em Verificar. A junção está efetivamente unindo os campos 1,2,3 da tabela 1 aos campos 1,2,3 da tabela 2.
Fezter
Não li muito bem o post, agora faz mais sentido.
Nagytech 9/08/12
Apenas como lembrete: verifique também se as classes ou tabelas fazem parte do mesmo geodatabase E verifique se os campos-chave nos quais a junção será operada são do mesmo tipo.

Respostas:

11

Sua sintaxe está incorreta.

Referência

Se você ler a ajuda da barra lateral Criar tabela de consultas :

Expressão (opcional)

Uma expressão SQL usada para selecionar um subconjunto de registros. A sintaxe da expressão difere um pouco, dependendo da fonte de dados. Por exemplo, se você estiver consultando tabelas de arquivo geodatabase ou ArcSDE, shapefiles, coverages, dBase ou INFO, coloque nomes de campo entre aspas duplas:

"MY_FIELD"

Se você estiver consultando bancos de dados geográficos pessoais, coloque os campos entre colchetes:

[MY_FIELD]

etc ...

Isso implicaria o formato correto como:

"Table2"."f1" = "Table1"."f1" AND "Table2"."f2" = "Table1"."f2" AND "Table2"."f3" = "Table1"."f3" 

Roteiro

O seguinte snippet python permitirá que você execute a ferramenta sem erros:

arcpy.MakeQueryTable_management("Table1;Table2","QueryTable11111","NO_KEY_FIELD","#","Table1.f1 #;Table1.f2 #;Table1.f3 #;Table2.f1 #;Table2.f2 #;Table2.f3 #","/\Table1/\./\f1/\ = /\Table2/\./\f1/\ AND /\Table1/\./\f2/\ = /\Table2/\./\f2/\ AND /\Table1/\./\f3/\ = /\Table2/\./\f3/\")

Resultado

insira a descrição da imagem aqui

nagytech
fonte
Estou ciente desse método, como mencionei na minha pergunta. Estou procurando outro caminho, se houver.
Fezter
3
Embora você esteja ciente da solução e seja, de fato, uma solução para o seu problema, outras podem não ser.
Nagytech 9/08/12
@ Fezter Atualizei minha resposta, por favor, dê uma olhada.
Nagytech
obrigado pela resposta atualizada. Eu usei o construtor de consultas, então presumi que o colocaria automaticamente na sintaxe correta para mim. Eu adicionei as aspas e ficou um pouco mais longe do que antes. Consigo executar a ferramenta, mas agora recebo o seguinte erro: ERRO 999999: Erro ao executar a função. Um campo esperado não foi encontrado ou não pôde ser recuperado corretamente. [QueryTable] Um campo esperado não foi encontrado ou não pôde ser recuperado corretamente. [Table2.Field1] Um campo esperado não foi encontrado ou não pôde ser recuperado corretamente. [Table2.Field1] Falha ao executar (MakeQueryTable).
Fezter
1
Retirei o voto negativo pelo seu esforço. Muito apreciado.
Fezter
6

(FGDB 10.2 e ArcMAP 10.2) Talvez esteja abrindo uma pergunta antiga - mas acho que isso é relevante. O criador de Criar tabela de consultas SQL gera um erro quando você verifica, mesmo se sua sintaxe estiver correta. Criei minha consulta sem aspas ou colchetes, simplesmente

Table1.Field1 = Table2.Field1 AND Table1.Field2 = Table2.Field2

e não selecionou verificar; Simplesmente executei a ferramenta e minha tabela de saída foi criada corretamente.

Outra pergunta Stackexchange referenciando esse erro; Reveja a resposta de User2118

Barrett
fonte
2
Encontrei a mesma coisa com um FGDB. Eu executei a ferramenta uma vez com aspas ("table.field" = "table2.field") como o Expression Builder criado e a verificação e a ferramenta falharam. Eu removi as aspas (table.field = table2.field) e a verificação falhou, mas a ferramenta foi executada com êxito. O ArcGIS Desktop e o FGDB são 10.2.2.
Dan