Sql Select 来自 table 的陈述与父子关系

Sql Select statement from table with father and son relationships

欢迎来到我的问题

我从 mysql 开始,我试图找出 select 语句及其用途。

我的table“业务”具有这些输入:

它是这样制作的:

CREATE TABLE IF NOT EXISTS business(
  businessname varchar(250) NOT NULL,
  title varchar(250) NOT NULL,
  registerdate datetime NOT NULL,
  id int NOT NULL,
  city varchar(50) NOT NULL,
  tk varchar(10) NOT NULL,
  number varchar(20) NOT NULL,
  branch int,
  doy_id int NOT NULL,
  PRIMARY KEY (id),
  FOREIGN KEY (branch) REFERENCES business(id)
  ON DELETE CASCADE ON UPDATE CASCADE,
  FOREIGN KEY (doy_id) REFERENCES doy(id_kataxorisis)
  ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB CHARACTER SET greek COLLATE greek_general_ci;

我想要select每个企业的 ID 和名称及其分支机构的数量(如果没有分支机构我希望它显示 0)。

ps:我已经想出了如何显示所有企业及其“父”企业。我不知道它是否有帮助,但我是这样做的:

select c.businessname as child, p.businessname as parent
from business c left join business p on p.id = c.branch
order by c.businessname;

数据为:

INSERT INTO business VALUES 
('Vasilopoulos Nikolaos', 'Vasilopoulos','1995-05-20 00:00',26400,'Volos',20004,120,NULL,5),
('Tzatzadaki Maria', 'Tzatzadakis','1992-10-02 00:00',20001,'Patra',24222,58,NULL,2),
('Tzatzadaki Maria', 'Tzatzadakis','1998-08-04 00:00',31200,'Patra',24228,180,20001,3),
('Tzatzadaki Maria', 'Tzatzadakis Ypokatastima 2','1998-08-04 00:00',31201,'Patra',24228,180,31200,3),
('Papadopoulos Ioannis', 'Papadopoulou Mpiskota','2000-01-15 00:00',18777,'Athina',27366,280,NULL,1),
('Kallimani Athanasia', 'Thalassina Kallimanis','2000-03-17 00:00',54874,'Korinthos',22008,71,NULL,4),
('Xristopoulos Ioannis','Chris','2010-05-05 00:00',80000,'Athina',24111,56,NULL,1),
('Kallimani Athanasia', 'Thalassina Kallimanis Kalamatas','2000-03-25 00:00',54875,'Kalamata',25005,23,54874,4),
('Kallimani Athanasia', 'Thalassina Kallimanis Spartis','2000-04-17 00:00',54876,'Sparti',28667,34,54874,4),
('Kallimani Athanasia', 'Thalassina Kallimanis Spartis A tomeas','2000-04-17 00:00',54877,'Sparti',28667,34,54876,4),
('Kallimani Athanasia', 'Thalassina Kallimanis Spartis B tomeas','2000-04-18 00:00',54878,'Sparti',28667,34,54876,4),
('Kallimani Athanasia', 'Thalassina Kallimanis Spartis A tomeas Syskevastirio','2000-04-24 00:00',54879,'Sparti',28667,34,54877,4);

提前感谢您的帮助

不确定您是否想要超过一个级别的分支数,但只获取父分支及其下面的子级数将是查询:

SELECT PB.ID,PB.businessname, COUNT(CB.ID) FROM business PB
LEFT JOIN business CB ON CB.branch = PB.ID
GROUP BY PB.ID,PB.businessname