Show data set with SELECT

Asked

Viewed 39 times

0

Opa, then, I have a problem to find (show) some data that is being requested, I need to show the following data: https://i.stack.Imgur.com/ypczD.png

and always appears the error that is an ambiguous list (I do not know if it is correct but it is the error 1052)

Follows complete programming:

DROP DATABASE IF EXISTS `desi_loja`;
CREATE DATABASE `desi_loja`;
USE `desi_loja`;

CREATE TABLE `produtos` (
  `produto_id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(50) NOT NULL,
  `quantidade_estoque` int(11) NOT NULL,
  `preco_unitario` decimal(4,2) NOT NULL,
  PRIMARY KEY (`produto_id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO `produtos` VALUES (1,'Prato Plástico Refeição',70,1.21);
INSERT INTO `produtos` VALUES (2,'Pernil Suíno',49,4.65);
INSERT INTO `produtos` VALUES (3,'Alface Romana',38,3.35);
INSERT INTO `produtos` VALUES (4,'Brócolis Chinês',90,4.53);
INSERT INTO `produtos` VALUES (5,'Molho Ranch',94,1.63);
INSERT INTO `produtos` VALUES (6,'Baguete Pequeno',14,2.39);
INSERT INTO `produtos` VALUES (7,'Broto de ervilha',98,3.29);
INSERT INTO `produtos` VALUES (8,'Suco de Framboesa',26,0.74);
INSERT INTO `produtos` VALUES (9,'Fruta Olho do Dragão - Longan',67,2.26);
INSERT INTO `produtos` VALUES (10,'Vassoura Multiuso',6,1.09);


CREATE TABLE `transportadoras` (
  `transportadora_id` smallint(6) NOT NULL AUTO_INCREMENT,
  `nome` varchar(50) NOT NULL,
  PRIMARY KEY (`transportadora_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO `transportadoras` VALUES (1,'Acme LLC');
INSERT INTO `transportadoras` VALUES (2,'Fastco');
INSERT INTO `transportadoras` VALUES (3,'Satturn LLC');
INSERT INTO `transportadoras` VALUES (4,'Bombom S/A');
INSERT INTO `transportadoras` VALUES (5,'WMP Ltda.');


CREATE TABLE `clientes` (
  `cliente_id` int(11) NOT NULL AUTO_INCREMENT,
  `primeiro_nome` varchar(50) NOT NULL,
  `sobrenome` varchar(50) NOT NULL,
  `data_aniversario` date DEFAULT NULL,
  `telefone` varchar(50) DEFAULT NULL,
  `endereco` varchar(50) NOT NULL,
  `cidade` varchar(50) NOT NULL,
  `estado` char(2) NOT NULL,
  `pontos` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`cliente_id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO `clientes` VALUES (1,'Barbara','Caffrey','1986-03-28','4781932-9754','Avenida Osvaldo Veiga','Blumenau','SC',2273);
INSERT INTO `clientes` VALUES (2,'Ines','Ushfield','1986-04-13','4804427-9456','Rua Rui Barbosa','Capivari de Baixo','SC',947);
INSERT INTO `clientes` VALUES (3,'Fred','Borges','1985-02-07','4719724-7869','Avenida Primavera, 251 ','Criciuma','SC',2967);
INSERT INTO `clientes` VALUES (4,'Antonio','Rosa','1974-04-14','4407231-8017','Rua Arapongas, 5982','Ponta Grossa','PR',457);
INSERT INTO `clientes` VALUES (5,'Clemente','Bento','1973-11-07',NULL,'Travessa Bom Jesus, 15','Manaus','AM',3675);
INSERT INTO `clientes` VALUES (6,'Elke','Tancredo','1991-09-04','5312480-8498','Avenida Macau, 4219','Canoas','RS',3073);
INSERT INTO `clientes` VALUES (7,'Irene','Dias','1964-08-30','8615641-4759','Rua Tiradentes, 50','Natal','RN',1672);
INSERT INTO `clientes` VALUES (8,'Thalita','Nandi','1993-07-17','1941527-3977','Avenida Paulista, 538','São Paulo','SP',205);
INSERT INTO `clientes` VALUES (9,'Romulo','Rios','1992-05-23','1559181-3744','Rua Chico Mendes, 4568','Bom Sucesso','RJ',1486);
INSERT INTO `clientes` VALUES (10,'Levy','Mendes','1969-10-13','1404246-3370','Avenida Atlanta, 10','Maceio','AL',796);


CREATE TABLE `pedido_situacoes` (
  `pedido_situacao_id` tinyint(4) NOT NULL,
  `nome` varchar(50) NOT NULL,
  PRIMARY KEY (`pedido_situacao_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO `pedido_situacoes` VALUES (1,'Processado');
INSERT INTO `pedido_situacoes` VALUES (2,'Transportado');
INSERT INTO `pedido_situacoes` VALUES (3,'Entregue');


CREATE TABLE `pedidos` (
  `pedido_id` int(11) NOT NULL AUTO_INCREMENT,
  `cliente_id` int(11) NOT NULL,
  `pedido_data` date NOT NULL,
  `situacao` tinyint(4) NOT NULL DEFAULT '1',
  `comentarios` varchar(2000) DEFAULT NULL,
  `data_transporte` date DEFAULT NULL,
  `transportadora_id` smallint(6) DEFAULT NULL,
  PRIMARY KEY (`pedido_id`),
  KEY `fk_pedidos_clientes_idx` (`cliente_id`),
  KEY `fk_pedidos_transportadoras_idx` (`transportadora_id`),
  KEY `fk_pedidos_pedido_situacoes_idx` (`situacao`),
  CONSTRAINT `fk_pedidos_clientes` FOREIGN KEY (`cliente_id`) REFERENCES `clientes` (`cliente_id`) ON UPDATE CASCADE,
  CONSTRAINT `fk_pedidos_pedido_situacoes` FOREIGN KEY (`situacao`) REFERENCES `pedido_situacoes` (`pedido_situacao_id`) ON UPDATE CASCADE,
  CONSTRAINT `fk_pedidos_transportadoras` FOREIGN KEY (`transportadora_id`) REFERENCES `transportadoras` (`transportadora_id`) ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO `pedidos` VALUES (1,6,'2019-01-30',1,NULL,NULL,NULL);
INSERT INTO `pedidos` VALUES (2,7,'2018-08-02',2,NULL,'2018-08-03',4);
INSERT INTO `pedidos` VALUES (3,8,'2017-12-01',1,NULL,NULL,NULL);
INSERT INTO `pedidos` VALUES (4,2,'2017-01-22',1,NULL,NULL,NULL);
INSERT INTO `pedidos` VALUES (5,5,'2017-08-25',2,'','2017-08-26',3);
INSERT INTO `pedidos` VALUES (6,10,'2018-11-18',1,'Aliquam erat volutpat. In congue.',NULL,NULL);
INSERT INTO `pedidos` VALUES (7,2,'2018-09-22',2,NULL,'2018-09-23',4);
INSERT INTO `pedidos` VALUES (8,5,'2018-06-08',1,'Mauris enim leo, rhoncus sed, vestibulum sit amet, cursus id, turpis.',NULL,NULL);
INSERT INTO `pedidos` VALUES (9,10,'2017-07-05',2,'Nulla mollis molestie lorem. Quisque ut erat.','2017-07-06',1);
INSERT INTO `pedidos` VALUES (10,6,'2018-04-22',2,NULL,'2018-04-23',2);


CREATE TABLE `pedido_itens` (
  `pedido_id` int(11) NOT NULL AUTO_INCREMENT,
  `produto_id` int(11) NOT NULL,
  `quantidade` int(11) NOT NULL,
  `preco_unitario` decimal(4,2) NOT NULL,
  PRIMARY KEY (`pedido_id`,`produto_id`),
  KEY `fk_pedido_itens_produtos_idx` (`produto_id`),
  CONSTRAINT `fk_pedido_itens_pedidos` FOREIGN KEY (`pedido_id`) REFERENCES `pedidos` (`pedido_id`) ON UPDATE CASCADE,
  CONSTRAINT `fk_pedido_itens_produtos` FOREIGN KEY (`produto_id`) REFERENCES `produtos` (`produto_id`) ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO `pedido_itens` VALUES (1,4,4,3.74);
INSERT INTO `pedido_itens` VALUES (2,1,2,9.10);
INSERT INTO `pedido_itens` VALUES (2,4,4,1.66);
INSERT INTO `pedido_itens` VALUES (2,6,2,2.94);
INSERT INTO `pedido_itens` VALUES (3,3,10,9.12);
INSERT INTO `pedido_itens` VALUES (4,3,7,6.99);
INSERT INTO `pedido_itens` VALUES (4,10,7,6.40);
INSERT INTO `pedido_itens` VALUES (5,2,3,9.89);
INSERT INTO `pedido_itens` VALUES (6,1,4,8.65);
INSERT INTO `pedido_itens` VALUES (6,2,4,3.28);
INSERT INTO `pedido_itens` VALUES (6,3,4,7.46);
INSERT INTO `pedido_itens` VALUES (6,5,1,3.45);
INSERT INTO `pedido_itens` VALUES (7,3,7,9.17);
INSERT INTO `pedido_itens` VALUES (8,5,2,6.94);
INSERT INTO `pedido_itens` VALUES (8,8,2,8.59);
INSERT INTO `pedido_itens` VALUES (9,6,5,7.28);
INSERT INTO `pedido_itens` VALUES (10,1,10,6.01);
INSERT INTO `pedido_itens` VALUES (10,9,9,4.28);

CREATE TABLE `desi_loja`.`pedido_item_observacoes` (
  `observacao_id` INT NOT NULL,
  `pedido_id` INT NOT NULL,
  `produto_id` INT NOT NULL,
  `observacao` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`observacao_id`));

INSERT INTO `pedido_item_observacoes` (`observacao_id`, `pedido_id`, `produto_id`, `observacao`) VALUES ('1', '2', '1', 'Primeira observação');
INSERT INTO `pedido_item_observacoes` (`observacao_id`, `pedido_id`, `produto_id`, `observacao`) VALUES ('2', '2', '1', 'Segunda observação');

SELECT pedido_data AS "data do pedido", pedido_id AS "Nº do pedido", preco_unitario * quantidade AS "Valor Pedido", primeiro_nome + sobrenome AS "Nome do Cliente", situacao AS "Situação do pedido"
FROM pedidos,pedido_itens,clientes,pedido_situacoes
GROUP BY pedido_id
ORDER BY pedido_id

Follow the programming only of the research part:

SELECT pedido_data AS "data do pedido", pedido_id AS "Nº do pedido", preco_unitario * quantidade AS "Valor Pedido", primeiro_nome + sobrenome AS "Nome do Cliente", situacao AS "Situação do pedido"
FROM pedidos,pedido_itens,clientes,pedido_situacoes
GROUP BY pedido_id
ORDER BY pedido_id

2 answers

1


"the error that is an ambiguous list" that means, some field you have in charge, is in the SELECT, WHERE, ORDER BY or GROUP BY exists in more than one table with the same name. In this case it is necessary to say "which table" is the field you want to use.

For example "pedido_id" exists in the "requests" and "pedido_items" tables, so if you want to use the value of the "requests" table, you should use "requests.pedido_id".

In addition, it added several tables in the FROM and didn’t say how they are connected, need to do it using JOIN. Whether or not there is a foreign key does not tell to "automatically" use the field, you need to say explicitly.

See this example below:

SELECT pedido_data AS "data do pedido", 
       pedidos.pedido_id AS "Nº do pedido", 
       preco_unitario * quantidade AS "Valor Pedido", 
       primeiro_nome + sobrenome AS "Nome do Cliente", situacao AS "Situação do pedido"
 FROM pedidos
INNER JOIN pedido_itens ON pedidos.pedido_id = pedido_itens.pedido_id
INNER JOIN clientes ON pedidos.cliente_id = clientes.cliente_id
INNER JOIN pedido_situacoes ON pedidos.situacao  = pedido_situacoes.pedido_situacao_id
ORDER BY pedidos.pedido_id

Note that all fields that are "ambiguous" have been prefixed with the table name (you could use a alias to simplify the name as well).

In addition, I did Join (user o INNER JOIN in this case) between all tables, or would bring many duplicated results.

Finally, I removed the GROUP BY, because it is no use to group only by pedido_id, and the other fields in the SELECT not be grouped.

You can see it working here: https://www.db-fiddle.com/

-1

You forgot to use INNER JOIN and your syntax in some parts was wrong. I managed to get the following return (which I believe is the way you want it): inserir a descrição da imagem aqui

Using the following query:

 SELECT pedidos.pedido_data AS "Data do Pedido", pedidos.pedido_id AS "N° do Pedido", produtos.preco_unitario * pedido_itens.quantidade as "Valor Pedido", CONCAT(clientes.primeiro_nome, clientes.sobrenome) as "Nome do Cliente", pedidos.situacao AS "Situação do Pedido" FROM Pedidos INNER JOIN pedido_itens ON pedidos.pedido_id = pedido_itens.pedido_id INNER JOIN clientes ON pedidos.cliente_id = clientes.cliente_id INNER JOIN produtos ON pedido_itens.produto_id = produtos.produto_id ORDER BY pedidos.pedido_id;

Browser other questions tagged

You are not signed in. Login or sign up in order to post.