programing

행의 ID로 다른 테이블에 연결된 행이 2개 이상인 이름을 가져오는 방법

lovejava 2023. 9. 16. 08:20

행의 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