Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, boa tarde
Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
1, laranja, uva, arroz, feijão;
2, maçã, macarrão, goiaba, uva;
3, arroz, feijão, maçã, azeite
Meu problema é o seguinte:
Eu escolho um produto da tabela "produtos", por exemplo "uva". Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva".
Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.Para resolver o problema que você descreveu, precisa de uma consulta SQL que selecione os registros da tabela "itens" onde o produto escolhido, como "uva", apareça e todos os outros produtos nesse registro também estejam listados na tabela "produtos". Isso garante que todos os produtos relacionados em cada item estejam validados contra a lista de produtos aceitáveis.
Dada a estrutura atual das suas tabelas e considerando que você quer filtrar por um produto específico e garantir que todos os produtos mencionados no registro estejam na tabela "produtos", uma possível abordagem é a seguinte:
SELECT i.*
FROM itens i
WHERE 'uva' IN (i.prod_01, i.prod_02, i.prod_03, i.prod_04)
AND EXISTS (SELECT 1 FROM produtos p WHERE p.produto = i.prod_01)
AND EXISTS (SELECT 1 FROM produtos p WHERE p.produto = i.prod_02)
AND EXISTS (SELECT 1 FROM produtos p WHERE p.produto = i.prod_03)
AND EXISTS (SELECT 1 FROM produtos p WHERE p.produto = i.prod_04);
Nessa consulta:
A cláusula WHERE 'uva' IN (i.prod_01, i.prod_02, i.prod_03, i.prod_04) verifica se "uva" está em algum dos campos de produto em um registro da tabela "itens".
As cláusulas EXISTS verificam se cada produto listado em um registro específico de "itens" está presente na tabela "produtos". Isso é feito para cada campo de produto (prod_01, prod_02, etc.).
Se você estiver usando MySQL ou outro sistema compatível no OneCompiler, o código que forneci deve funcionar conforme abaixo.
[https://onecompiler.com/mysql/42b35kdf5](https://onecompiler.com/mysql/42b35kdf5)
-- Criação das tabelas
CREATE TABLE produtos (
id INT AUTO_INCREMENT PRIMARY KEY,
produto VARCHAR(50)
);
CREATE TABLE itens (
id INT AUTO_INCREMENT PRIMARY KEY,
prod_01 VARCHAR(50),
prod_02 VARCHAR(50),
prod_03 VARCHAR(50),
prod_04 VARCHAR(50)
);
-- Inserção de dados na tabela produtos
INSERT INTO produtos (produto) VALUES
('laranja'),
('maçã'),
('uva'),
('goiaba'),
('arroz'),
('feijão'),
('macarrão'),
('azeite');
-- Inserção de dados na tabela itens
INSERT INTO itens (prod_01, prod_02, prod_03, prod_04) VALUES
('laranja', 'uva', 'arroz', 'feijão'),
('maçã', 'macarrão', 'goiaba', 'uva'),
('arroz', 'feijão', 'maçã', 'azeite');
-- Consulta para verificar a presença de 'uva' e validar os outros produtos
SELECT i.*
FROM itens i
WHERE 'uva' IN (i.prod_01, i.prod_02, i.prod_03, i.prod_04)
AND EXISTS (SELECT 1 FROM produtos p WHERE p.produto = i.prod_01)
AND EXISTS (SELECT 1 FROM produtos p WHERE p.produto = i.prod_02)
AND EXISTS (SELECT 1 FROM produtos p WHERE p.produto = i.prod_03)
AND EXISTS (SELECT 1 FROM produtos p WHERE p.produto = i.prod_04);
Olá! Boa tarde!
Coloque num https://dbfiddle.uk pra gente tentar entender.