SELECT COM 3 OU MAIS TABELAS

GGERMINIANI 21/06/2017 22:37:00
#474653
Pessoal,
Boa noite.

Estou enfrentando um erro de principiante (eu acho), mas não consigo enxergar onde estou errando.

Tenho 3 tabelas:

[NFE]
ID_NFE
DT_EMI

[ITENS_NFE]
ID_ITEM_NFE
ID_NFE
ID_PRODUTO

[PRODUTO]
ID_PRODUTO
PRODUTO

Pois bem, tenho um Array com vários IDs, e estes deverão me retornar um select. Abaixo o código.

  
If _cn.State = ConnectionState.Closed Then _cn.Open()
Dim comm As OleDbCommand = New OleDbCommand
comm.Connection = _cn

Dim ProdParameter = New List(Of String)()
Dim index = 0
Dim Datas As New ArrayList
Dim i As Integer

_query = [Ô]Select * From [Ô] _
& [Ô]NFE As N Inner Join ITENS_NFE As T [Ô] _
& [Ô]On N.ID_NFE = T.ID_NFE [Ô] _
& [Ô]Inner Join PRODUTO as P [Ô] _
& [Ô]On T.ID_PRODUTO = P.ID_PRODUTO [Ô] _
& [Ô]Where T.ID_PRODUTO IN ({0}) [Ô] _
& [Ô]Order by DT_EMI[Ô]



For Each id In IDProdLst.SelectedItems
Dim paramProd As String = [Ô]@idParam[Ô] & index
comm.Parameters.AddWithValue(paramProd, id.ToString)
ProdParameter.Add(paramProd)
index += 1
Next

comm.CommandText = [String].Format(_query, String.Join([Ô],[Ô], ProdParameter))

Dim da As OleDbDataAdapter = New OleDbDataAdapter(comm)
Dim ds As DataSet = New DataSet()
da.Fill(ds, [Ô]PROD[Ô])
Dim Linhas() As DataRow = ds.Tables([Ô]PROD[Ô]).Select


Se eu tiro o terceiro Inner Join (_query = [Ô]Select * From NFE as N Inner Join ITENS_NFE as T On N.ID_NFE = T.ID_NFE Where ID_PRODUTO IN ({0}) Order By DT_EMI[Ô]) me retornar normalmente, mas quando incluo a tabela PRODUTO, me aparece o seguinte erro:

{[Ô]Syntax error (missing operator) in query expression [ô]N.ID_NFE = T.ID_NFE Inner Join PRODUTO as P On T.ID_PRODUTO = P.ID_PRODUT[ô].[Ô]}

Simplesmente preciso fazer um join com a tabela PRODUTO para ter o nome dos produtos, caso contrário está me retornando somente os IDs, o que dificulta o entendimento para o usuário final.

Alguém faz ideia?

Grato.
JABA 22/06/2017 00:45:19
#474657
Resposta escolhida
Tente algo assim:

Select NFE.ID_NFE, NFE.DT_EMI, PRODUTO.PRODUTO From NFE, ITENS_NFE, PRODUTO Where NFE.ID_NFE = ITENS_NFE.ID_NFE And ITENS_NFE.ID_PRODUTO = PRODUTO.ID_PRODUTO
GGERMINIANI 22/06/2017 17:00:51
#474671
Citação:

:
Tente algo assim:

Select NFE.ID_NFE, NFE.DT_EMI, PRODUTO.PRODUTO From NFE, ITENS_NFE, PRODUTO Where NFE.ID_NFE = ITENS_NFE.ID_NFE And ITENS_NFE.ID_PRODUTO = PRODUTO.ID_PRODUTO



Perfeito! Funcionou 100%

Só me tira uma dúvida? Estou retomando este tipo de trabalho recentemente após muitos anos sem mexer com programação, por isso que estou com essas dificuldades bestas...

A partir de 3 tabelas o INNER JOIN não funciona?

Muito obrigado!
JABA 22/06/2017 17:41:42
#474674
Citação:

A partir de 3 tabelas o INNER JOIN não funciona?



Funciona sim, o que eu fiz foi só uma maneira diferente de implementar o inner join, no final das contas é a mesma coisa.
Pra usar o inner join no MS-Access é preciso separar direitinho a ordem das tabelas através dos parênteses, por isso não funcionou para o que você fez.
GGERMINIANI 22/06/2017 18:47:52
#474677
Muito obrigado!

Cheers!
Tópico encerrado , respostas não são mais permitidas