SELECT COM 3 OU MAIS TABELAS
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.
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.
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.
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
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!
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.
Muito obrigado!
Cheers!
Cheers!
Tópico encerrado , respostas não são mais permitidas