행의 ID로 다른 테이블에 연결된 행이 2개 이상인 이름을 가져오는 방법
데이터베이스와 두 개의 테이블을 만들기 위해 이 코드를 사용했습니다.
DROP DATABASE IF EXISTS shop;
CREATE DATABASE shop CHARACTER SET utf8mb4;
USE shop;
CREATE TABLE manufacturer (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
CREATE TABLE product (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price DOUBLE NOT NULL,
manufacturer_id INT UNSIGNED NOT NULL,
FOREIGN KEY (manufacturer_id) REFERENCES manufacturer(id)
);
INSERT INTO manufacturer VALUES(1, 'Asus');
INSERT INTO manufacturer VALUES(2, 'Lenovo');
INSERT INTO manufacturer VALUES(3, 'Hewlett-Packard');
INSERT INTO manufacturer VALUES(4, 'Samsung');
INSERT INTO manufacturer VALUES(5, 'Seagate');
INSERT INTO manufacturer VALUES(6, 'Crucial');
INSERT INTO manufacturer VALUES(7, 'Gigabyte');
INSERT INTO manufacturer VALUES(8, 'Huawei');
INSERT INTO manufacturer VALUES(9, 'Xiaomi');
INSERT INTO product VALUES(1, 'Disco duro SATA3 1TB', 86.99, 5);
INSERT INTO product VALUES(2, 'Memoria RAM DDR4 8GB', 120, 6);
INSERT INTO product VALUES(3, 'Disco SSD 1 TB', 150.99, 4);
INSERT INTO product VALUES(4, 'GeForce GTX 1050Ti', 185, 7);
INSERT INTO product VALUES(5, 'GeForce GTX 1080 Xtreme', 755, 6);
INSERT INTO product VALUES(6, 'Monitor 24 LED Full HD', 202, 1);
INSERT INTO product VALUES(7, 'Monitor 27 LED Full HD', 245.99, 1);
INSERT INTO product VALUES(8, 'Portátil Yoga 520', 559, 2);
INSERT INTO product VALUES(9, 'Portátil Ideapd 320', 444, 2);
INSERT INTO product VALUES(10, 'Impresora HP Deskjet 3720', 59.99, 3);
INSERT INTO product VALUES(11, 'Impresora HP Laserjet Pro M26nw', 180, 3);
예상 결과: 2개 이상의 제품을 보유한 제조사의 이름이 포함된 목록을 반환합니다.
다음 쿼리를 시도했지만 둘 다 빈 집합을 반환합니다.
SELECT manufacturer.name FROM product INNER JOIN manufacturer ON product.manufacturer_id = manufacturer.id WHERE (SELECT COUNT(product.id)) >= 2 GROUP BY manufacturer.name;
SELECT manufacturer.name FROM product INNER JOIN manufacturer ON product.manufacturer_id = manufacturer.id WHERE (SELECT COUNT(producto.id) FROM producto) >= 2 GROUP BY manufacturer.name;
다음 방법입니다.
먼저 제품 테이블에서 제품을 2개 이상 보유한 모든 제조업체에서 다음을 사용하여 구합니다.group by
그리고.having count(1) >= 2
:
select manufacturer_id
from product
group by manufacturer_id
having count(1) >= 2
그런 다음 이 데이터 세트를 제조업체 테이블과 결합합니다.
select m.name
from manufacturer m
inner join (
select manufacturer_id
from product
group by manufacturer_id
having count(1) >= 2
) as s on s.manufacturer_id = m.id
결과:
name
Asus
Lenovo
Hewlett-Packard
Crucial
언급URL : https://stackoverflow.com/questions/76162019/how-to-get-those-names-which-have-2-or-more-rows-linked-with-them-in-an-other-ta
'programing' 카테고리의 다른 글
MySQL 쿼리 - SUM of COUNT 사용 (0) | 2023.09.16 |
---|---|
최대값을 기준으로 테이블 결합 (0) | 2023.09.16 |
Docker Composes를 사용한 대화형 셸 (0) | 2023.09.16 |
행 자체의 수량 필드를 기준으로 동일한 행을 여러 개 반환하려면 어떻게 해야 합니까? (0) | 2023.09.16 |
What Runtime예외적으로 Spring Crud Repository가 던질 수 있습니까? (0) | 2023.09.11 |