показать имена всех поставщиков, которые появляются более одного раза в таблице поставок

#mysql #sql #jdbc

#mysql #sql #jdbc

Вопрос:

У меня есть 2 таблицы расходные материалы и поставщик, мне нужно напечатать имена всех поставщиков, которые появляются более одного раза в таблице расходных материалов. Я пытался использовать следующий код:

 SELECT name FROM SUPPLIER
WHERE supplier.supplierNum = supplies.supplerNum
having count(supplierNum) > 1;
 

но код i=не сработал.
здесь это таблицы:

 CREATE TABLE supplies (
  supplierNum CHAR(2) NOT NULL,
  partNum CHAR(2) NOT NULL,
  quantity SMALLINT(6) NOT NULL,
  PRIMARY KEY (supplierNum, partNum),
  FOREIGN KEY (supplierNum) REFERENCES supplier (supplierNum),
  FOREIGN KEY (partNum) REFERENCES parts (partNum)
);

CREATE TABLE supplier (
  supplierNum CHAR(2)   NOT NULL,
  name CHAR(10) NOT NULL,
  status TINYINT(4) NOT NULL,
  city VARCHAR(10)  NOT NULL,
   PRIMARY KEY (supplierNum)
);
 

Комментарии:

1. просмотр соединений dev.mysql.com/doc/refman/8.0/en/join.html и псевдоним dev.mysql.com/doc/refman/8.0/en/problems-with-alias.html

Ответ №1:

Сначала подсчитайте вхождение в supplies таблицу, а затем join с помощью supplier :

 SELECT sp.name
FROM supplier AS sp
INNER JOIN 
  (
  SELECT distinct supplierNum 
  FROM supplies
  GROUP BY supplierNum
  HAVING COUNT(supplierNum) > 1
  ) as cnt
 ON sp.supplierNum = cnt.supplierNum;
 

Демонстрация в db<>скрипка здесь