Кто может получить разницу между двумя идентификаторами в виде одной и той же структуры

У меня есть такая таблица:

id_begain | id_end | name | address | m_number
----------+--------+------+---------+-----------
1         | 5      | a    | hyd     | 099
7         | 9      | b    | pne     | 999
200       | 288    | c    | bng     | 1999

Мне нужен такой вывод:

id  name  address  m_number
----------------------------
1    a      hyd     099
2    a      hyd     099
3    a      hyd     099
4    a      hyd     099
5    a      hyd     099 
7    b      pne     999
8    b      pne     999
9    b      pne     999
200  c      bng     1999
201  c      bng     1999
... 
288  c      bng     1999

NB: Я полагаю, id_begain должно быть id_begin?

trincot 22.03.2019 07:06

Майскл? Tsql? SQL-сервер? Выбери один! Mysql и SQL Server не имеют общего диалекта sql.

SMor 22.03.2019 12:51
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
66
2

Ответы 2

С этим можно легко справиться, используя подход календарной таблицы с CTE, содержащим последовательность всех чисел, которые могут появиться в ваших начальных или конечных столбцах:

WITH numbers AS (
    SELECT ones.n + 10*tens.n + 100*hundreds.n + 1000*thousands.n AS id
    FROM (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) ones(n),
         (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) tens(n),
         (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) hundreds(n),
         (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) thousands(n)
    WHERE ones.n + 10*tens.n + 100*hundreds.n + 1000*thousands.n BETWEEN 1 AND 10000
)

SELECT
    t1.id,
    t2.name,
    t2.address,
    t2.m_number
FROM numbers t1
INNER JOIN yourTable t2
    ON t1.id BETWEEN t2.id_begain AND t2.id_end
ORDER BY
    t1.id;

но мой номер больше 10000, мой идентификатор вроде - 25645845651, пытался добавить (10000 * tenthousands.n), как я могу добавить больше, спасибо @tim

manoj 23.03.2019 08:38

Затем расширьте CTE, чтобы охватить более высокую последовательность.

Tim Biegeleisen 23.03.2019 09:16

Вы можете использовать рекурсивное общее табличное выражение (tbl — это ваша таблица):

with cte as (
    select id_begin, id_end, name, address, m_number 
    from   tbl
    union all
    select id_begin+1, id_end, name, address, m_number
    from   cte
    where  id_begin < id_end
)
select   id_begin as id, name, address, m_number
from     cte
order by 1;

Я ПОЛУЧИЛ ОШИБКУ MAXRECURSION, Я ПЫТАЛСЯ УСТАНОВИТЬ (ВАРИАНТ (MAXRECURSION 0). НО НЕ РАБОТАЕТ ....... СПАСИБО @PETER

manoj 23.03.2019 07:31

Это решение действительно не подходит, когда вы ожидаете так много записей. (не надо кричать)

trincot 23.03.2019 08:53

Другие вопросы по теме