#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<>скрипка здесь