【问题标题】:Sql Select statement from table with father and son relationships具有父子关系的表中的 Sql Select 语句
【发布时间】:2021-12-31 15:01:20
【问题描述】:

欢迎回答我的问题

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

我有包含这些输入的“业务”表:

它是这样制作的:

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;

我想选择每个企业的 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);

提前感谢您的帮助

【问题讨论】:

  • 能否请您提供文本或dbfille的数据
  • @nbk 我编辑我的问题
  • 似乎有超过 1 级深度。我想知道像 recursive cte 这样的东西是否可以在 mysql 中工作,或者在这里有用。
  • 这最好用递归 cte 解决

标签: mysql sql select


【解决方案1】:

不确定您是否想要超过一层深度的分支数,但仅获取父分支及其子分支数如下查询:

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

【讨论】:

  • 我想这就是我想要的。非常感谢!!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多