Требуется: помочь перевести MSSQLSvr Рекурсивный запрос в MySQL SQL - PullRequest
0 голосов
/ 23 октября 2018

Я вижу, что новый MySQL может выполнять рекурсивные запросы!Yahoo!Может кто-нибудь помочь мне перевести это, чтобы я мог видеть, как это работает на MySQL V8?

WITH gov AS (
    SELECT 1 AS level, * FROM gov_unit where parent_id is null
  UNION ALL
   SELECT gov.level+1 AS level, gov_unit.* FROM gov_unit 
     INNER JOIN gov ON (gov_unit.parent_id = gov.id)
) SELECT * FROM gov;

Очевидно, синтаксис MySQL для "SELECT 1 AS level" немного отличается.

ВотПример таблицы из моей любимой книги «Карманный справочник по SQL»:

create table gov_unit (
  id      integer NOT NULL,
  parent_id   integer DEFAULT 3,
  name        varchar(10),
  type        varchar(8),
  constraint gov_unit_pk 
    primary key (id),
  constraint gov_unit_type_chk
    check (type in ('County','Township','City','State')),
    constraint gov_unit_loop
            foreign key (parent_id)
            references gov_unit(id)
) engine=innodb;

Вот некоторые примеры данных:

insert into gov_unit values (3,null,'Michigan','State');
insert into gov_unit values (2,3,'Alger','County');
insert into gov_unit values (1,2,'Munising','City');
insert into gov_unit values (4,2,'Munising','Township');
insert into gov_unit values (5,2,'Au Train','Township');
insert into gov_unit values (6,3,'Baraga','County');
insert into gov_unit values (7,3,'Ontonagon','County');
insert into gov_unit values (8,7,'Interior','Township');
insert into gov_unit values (9,3,'Dickinson','County');
insert into gov_unit values (10,3,'Gogebic','County');
insert into gov_unit values (11,3,'Delta','County');
insert into gov_unit values (12,11,'Masonville','Township');

1 Ответ

0 голосов
/ 23 октября 2018

Было две проблемы: (1) мне нужно было сказать gov_unit. * Вместо * (спасибо Мадхур).(2) Мне нужно было изменить «с помощью gov» на «с помощью recursive gov».Теперь это работает!

...