0
Supposing for the client I can add more
joins
as not only sales, and the result of this consultation bring much more records. This is a performative way of working or would be better to query each separate table and populate my object Client in C#?
CREATE TABLE CLIENTE
(
ID_CLIENTE INT PRIMARY KEY IDENTITY (1, 1),
NOME_CLIENTE VARCHAR(200) NOT NULL
)
INSERT INTO CLIENTE (NOME_CLIENTE) VALUES ('TESTE 1')
CREATE TABLE VENDA
(
ID_VENDA INT PRIMARY KEY IDENTITY (1, 1),
ID_CLIENTE INT NOT NULL
)
ALTER TABLE VENDA ADD CONSTRAINT PK_VENDA_CLIENTE PRIMARY KEY (ID_VENDA, ID_CLIENTE)
INSERT INTO CLIENTE (ID_CLIENTE) VALUES ((SELECT ID_CLIENTE FROM CLIENTE WHERE NOME_CLIENTE = 'TESTE 1'))
CREATE TABLE PRODUTO
(
ID_PRODUTO INT PRIMARY KEY IDENTITY (1, 1),
NOME_PRODUTO VARCHAR(200) NOT NULL,
VALOR_PRODUTO DECIMAL(10,4) NOT NULL
)
INSERT INTO PRODUTO (NOME_PRODUTO, VALOR_PRODUTO) VALUES ('TOMATE', 10)
INSERT INTO PRODUTO (NOME_PRODUTO, VALOR_PRODUTO) VALUES ('ABACAXI', 20)
INSERT INTO PRODUTO (NOME_PRODUTO, VALOR_PRODUTO) VALUES ('UVA', 30)
INSERT INTO PRODUTO (NOME_PRODUTO, VALOR_PRODUTO) VALUES ('MORANGO', 40)
INSERT INTO PRODUTO (NOME_PRODUTO, VALOR_PRODUTO) VALUES ('ALFACE', 50)
CREATE TABLE VENDAPRODUTO
(
ID_VENDA INT NOT NULL,
ID_PRODUTO INT NOT NULL,
QUANTIDADE INT NOT NULL,
VALOR_PRODUTO INT NOT NULL
)
INSERT INTO VENDAPRODUTO (ID_PRODUTO, QUANTIDADE, VALOR_PRODUTO) VALUES ((SELECT ID_PRODUTO FROM PRODUTO WHERE NOME_PRODUTO = 'TOMATE'), 1, 10)
INSERT INTO VENDAPRODUTO (ID_PRODUTO, QUANTIDADE, VALOR_PRODUTO) VALUES ((SELECT ID_PRODUTO FROM PRODUTO WHERE NOME_PRODUTO = 'ABACAXI'), 2, 20)
INSERT INTO VENDAPRODUTO (ID_PRODUTO, QUANTIDADE, VALOR_PRODUTO) VALUES ((SELECT ID_PRODUTO FROM PRODUTO WHERE NOME_PRODUTO = 'UVA'), 7, 30)
INSERT INTO VENDAPRODUTO (ID_PRODUTO, QUANTIDADE, VALOR_PRODUTO) VALUES ((SELECT ID_PRODUTO FROM PRODUTO WHERE NOME_PRODUTO = 'MORANGO'), 4, 40)
INSERT INTO VENDAPRODUTO (ID_PRODUTO, QUANTIDADE, VALOR_PRODUTO) VALUES ((SELECT ID_PRODUTO FROM PRODUTO WHERE NOME_PRODUTO = 'ALFACE'), 2, 50)
SELECT CLIENTE.ID_CLIENTE,
CLIENTE.NOME_CLIENTE,
VENDAPRODUTO.ID_PRODUTO,
PRODUTO.NOME_PRODUTO,
VENDAPRODUTO.QUANTIDADE,
VENDAPRODUTO.VALOR_PRODUTO
FROM CLIENTE CLIENTE
LEFT JOIN VENDA VENDA ON VENDA.ID_CLIENTE = CLIENTE.ID_CLIENTE
LEFT JOIN VENDAPRODUTO VENDAPRODUTO ON VENDAPRODUTO.ID_VENDA = VENDA.ID_VENDA
LEFT JOIN PRODUTO PRODUTO ON PRODUTO.ID_PRODUTO = VENDAPRODUTO.ID_PRODUTO
WHERE CLIENTE.ID_CLIENTE = 1
Upshot
/*
ID_CLIENTE | NOME_CLIENTE | ID_PRODUTO | NOME_PRODUTO | QUANTIDADE | VALOR_PRODUTO
1 | TESTE 1 | 1 | TOMATE | 1 | 10
1 | TESTE 1 | 2 | ABACAXI | 2 | 20
1 | TESTE 1 | 3 | UVA | 7 | 30
1 | TESTE 1 | 4 | MORANGO | 4 | 40
1 | TESTE 1 | 5 | ALFACE | 2 | 50
*/