INNER JOIN SQL CONSULTA

SQL Server

SQL

C#

Helpers

Banco de Dados

13/03/2019

Preciso exibir o nome de produtos, mas quando eu executo o comando só exibe o nome de 1 produto nas 4 colunas, alguem poderia me ajudar ?

SELECT
CODVENDA AS CÓDIGO,
NOMEPRODUTO AS PRODUTO,
NOMEPRODUTO AS PRODUTO1,
NOMEPRODUTO AS PRODUTO2,
NOMEPRODUTO AS PRODUTO3,
NOME AS CLIENTE,
DATAVENDA AS DATAVENDA,
'R$' + cast(VALORVENDA as VARCHAR(50)) AS VALORVENDA,
VENDIDOPOR as POR,
QTD AS QUANTIDADE
FROM VENDA JOIN PRODUTO
ON VENDA.CODPRODUTO = PRODUTO.CODPRODUTO
JOIN CLIENTE
ON VENDA.CODCLI = CLIENTE.CODCLI
Samuel

Samuel

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

14/03/2019

Precisa ser algo assim:
SELECT 
	C.CODVENDA AS CÓDIGO, 
	PR0.NOMEPRODUTO AS PRODUTO,
	PR1.NOMEPRODUTO AS PRODUTO1,
	PR2.NOMEPRODUTO AS PRODUTO2,
	PR3.NOMEPRODUTO AS PRODUTO3,
	C.NOME AS CLIENTE,
	V.DATAVENDA AS DATAVENDA,
	'R$' + cast(V.VALORVENDA as VARCHAR(50)) AS VALORVENDA,
	V.VENDIDOPOR as POR,
	V.QTD AS QUANTIDADE
FROM
	VENDA V
LEFT JOIN PRODUTO PR0 ON
	PR0.CODPRODUTO = V.CODPRODUTO
LEFT JOIN PRODUTO PR1 ON
	PR1.CODPRODUTO = V.CODPRODUTO1
LEFT JOIN PRODUTO PR2 ON
	PR2.CODPRODUTO = V.CODPRODUTO2
LEFT JOIN PRODUTO PR3 ON
	PR3.CODPRODUTO = V.CODPRODUTO3
JOIN CLIENTE C ON
	C.CODCLI = V.CODCLI


GOSTEI 1

Mais Respostas

Alex Lekao

Alex Lekao

13/03/2019

Oi Samuel, boa tarde!!!!

Sem mais dados da tabela e tal, fica um pouco mais difícil de ajudar, mas aparentemente(do jeito que esta descrito.) vc esta usando sempre o mesmo nome.

Você precisa usar o INNER JOIN mesmo? ele só vai apresentar itens que constem nas duas tabelas, se por acaso algum item da tabela "principal" não estiver na tabela secundaria, ele tbm será ignorado na relação.

Talvez seja interessante usar o LEFT JOIN para se certificar, ou dar mais detalhes da tabela, como sua estrutura "real" para tentarmos te ajudar melhor.

Atenciosamente,
GOSTEI 0
Samuel

Samuel

13/03/2019

Oi Samuel, boa tarde!!!!

Sem mais dados da tabela e tal, fica um pouco mais difícil de ajudar, mas aparentemente(do jeito que esta descrito.) vc esta usando sempre o mesmo nome.

Você precisa usar o INNER JOIN mesmo? ele só vai apresentar itens que constem nas duas tabelas, se por acaso algum item da tabela "principal" não estiver na tabela secundaria, ele tbm será ignorado na relação.

Talvez seja interessante usar o LEFT JOIN para se certificar, ou dar mais detalhes da tabela, como sua estrutura "real" para tentarmos te ajudar melhor.

Atenciosamente,



aqui esta meu banco de dados
TABLE CLIENTE
(
CODCLI INT IDENTITY NOT NULL PRIMARY KEY,
NOME VARCHAR(50),
CNPJ CHAR(18) ,
EMAIL VARCHAR(50),
TEL CHAR (13),
ENDERECO TEXT
)




TABLE PRODUTO (
CODPRODUTO INT NOT NULL PRIMARY KEY IDENTITY,
NOMEPRODUTO VARCHAR(50),
QUANTIDADE CHAR(10),
VALORPRODUTO MONEY
)

TABLE VENDA (
CODVENDA INT NOT NULL PRIMARY KEY IDENTITY,
CODPRODUTO INT FOREIGN KEY REFERENCES PRODUTO (CODPRODUTO),
CODPRODUTO1 INT,
CODPRODUTO2 INT,
CODPRODUTO3 INT,
CODCLI INT FOREIGN KEY REFERENCES CLIENTE (CODCLI),
QTD CHAR(10),
DATAVENDA DATE,
VALORVENDA MONEY,
VENDIDOPOR VARCHAR(MAX)
)

eu preciso mostrar o nome do produto com o codigo armazenado nos campos codProduto1, codProduto2,codProduto3, pegando o nome da tabela produto, pode me ajudar?
GOSTEI 0
Alex Lekao

Alex Lekao

13/03/2019

Oi Samuel, boa tarde!!!!

Sem mais dados da tabela e tal, fica um pouco mais difícil de ajudar, mas aparentemente(do jeito que esta descrito.) vc esta usando sempre o mesmo nome.

Você precisa usar o INNER JOIN mesmo? ele só vai apresentar itens que constem nas duas tabelas, se por acaso algum item da tabela "principal" não estiver na tabela secundaria, ele tbm será ignorado na relação.

Talvez seja interessante usar o LEFT JOIN para se certificar, ou dar mais detalhes da tabela, como sua estrutura "real" para tentarmos te ajudar melhor.

Atenciosamente,



aqui esta meu banco de dados
TABLE CLIENTE
(
CODCLI INT IDENTITY NOT NULL PRIMARY KEY,
NOME VARCHAR(50),
CNPJ CHAR(18) ,
EMAIL VARCHAR(50),
TEL CHAR (13),
ENDERECO TEXT
)




TABLE PRODUTO (
CODPRODUTO INT NOT NULL PRIMARY KEY IDENTITY,
NOMEPRODUTO VARCHAR(50),
QUANTIDADE CHAR(10),
VALORPRODUTO MONEY
)

TABLE VENDA (
CODVENDA INT NOT NULL PRIMARY KEY IDENTITY,
CODPRODUTO INT FOREIGN KEY REFERENCES PRODUTO (CODPRODUTO),
CODPRODUTO1 INT,
CODPRODUTO2 INT,
CODPRODUTO3 INT,
CODCLI INT FOREIGN KEY REFERENCES CLIENTE (CODCLI),
QTD CHAR(10),
DATAVENDA DATE,
VALORVENDA MONEY,
VENDIDOPOR VARCHAR(MAX)
)

eu preciso mostrar o nome do produto com o codigo armazenado nos campos codProduto1, codProduto2,codProduto3, pegando o nome da tabela produto, pode me ajudar?


Então, ainda não consegui entender muito bem sua necessidade.

Voce esta fazendo testes, eh isso?

Não sei se entendi bem, mas segue um modelo baseado no seu modelo.

SELECT 
   CODVENDA AS CÓDIGO, 
   VENDA.NOMEPRODUTO AS PRODUTO,
   VENDA.NOMEPRODUTO1 AS PRODUTO1,
   VENDA.NOMEPRODUTO2 AS PRODUTO2,
   VENDA.NOMEPRODUTO3 AS PRODUTO3,
   NOME AS CLIENTE,
   DATAVENDA AS DATAVENDA,
   'R$' + cast(VALORVENDA as VARCHAR(50)) AS VALORVENDA,
   VENDIDOPOR as POR,
   QTD AS QUANTIDADE
FROM VENDA JOIN PRODUTO ON VENDA.CODPRODUTO = PRODUTO.CODPRODUTO
JOIN CLIENTE ON VENDA.CODCLI = CLIENTE.CODCLI
GOSTEI 0
Fernando C

Fernando C

13/03/2019

olha, estou vendo que é um exercício, mas não acho boa lógica vc ter exatamente tres produtos em cada venda - sugiro que crie uma outra tabela relacionando venda e id do produto.
sua consulta então ficaria assim:
SELECT vendas.id, clientes.nome, produtos.nome
FROM (clientes INNER JOIN vendas ON clientes.Código = vendas.cliente) INNER JOIN (produtos INNER JOIN vendas_produtos ON produtos.Código = vendas_produtos.id_produto) ON vendas.id = vendas_produtos.id_venda;
GOSTEI 1
POSTAR