SQL – при срабатывании «GEN_ID», перестает работать «distinct»

150
28 марта 2019, 21:30

У меня запрос на вставку:

insert into CONTRACT (DEPARTMENT_ID_EXECUTE, ID, PROPOSAL_ID, ARCHIVE, USER_ID, CLIENT_ID, SEND_STATUS)
    select distinct(DEPARTMENT_ID_EXECUTE), GEN_ID(GEN_ID_CONTRACT, 1), 5, 1, 1, 12, 0
    from DISTRIBUTION_PROPOSAL where PROPOSAL_ID = 5

Проблема в том, что при использовании генератора

GEN_ID(GEN_ID_CONTRACT, 1),

Перестает работать «distinct», соответственно в «CONTRACT» вставляется больше записей, чем нужно.

Вопрос: Как переделать запрос «select», чтоб заработал «distinct»?

Answer 1

@msi, немного не так (ошибка: no column name specified for column number 2 in derived table .), но идея правильная,
Кому станет интересно:

insert into CONTRACT (DEPARTMENT_ID_EXECUTE, ID, PROPOSAL_ID, ARCHIVE, USER_ID, CLIENT_ID, SEND_STATUS)
    select DEPARTMENT_ID_EXECUTE, GEN_ID(GEN_ID_CONTRACT, 1), 5, 1, 1, 12, 0
    from (
        select distinct(DEPARTMENT_ID_EXECUTE)
        from DISTRIBUTION_PROPOSAL where PROPOSAL_ID = 5
    )
Answer 2

Может быть так:

insert into CONTRACT (DEPARTMENT_ID_EXECUTE, ID, PROPOSAL_ID, ARCHIVE, USER_ID, CLIENT_ID, SEND_STATUS)
    select distinct DEPARTMENT_ID_EXECUTE, GEN_ID(GEN_ID_CONTRACT, 1), 5, 1, 1, 12, 0
    from DISTRIBUTION_PROPOSAL where PROPOSAL_ID = 5

Или так:

insert into CONTRACT (DEPARTMENT_ID_EXECUTE, ID, PROPOSAL_ID, ARCHIVE, USER_ID, CLIENT_ID, SEND_STATUS)
    select distinct(DEPARTMENT_ID_EXECUTE), GEN_ID(Distinct GEN_ID_CONTRACT, 1), 5, 1, 1, 12, 0
    from DISTRIBUTION_PROPOSAL where PROPOSAL_ID = 5
Answer 3

Попробуйте так:

insert into CONTRACT (DEPARTMENT_ID_EXECUTE, PROPOSAL_ID, ARCHIVE, USER_ID, CLIENT_ID, SEND_STATUS, ID)
    select *, GEN_ID(GEN_ID_CONTRACT, 1) 
    from (select distinct DEPARTMENT_ID_EXECUTE, 5, 1, 1, 12, 0
    from DISTRIBUTION_PROPOSAL where PROPOSAL_ID = 5) X;
READ ALSO
fluentPDO записи за последние 24 часа?

fluentPDO записи за последние 24 часа?

На сайте используется fluentPDOКаким кодом можно вытащить записи за последние 24 часа? В базе created_at (CURRENT_TIMESTAMP)

211
Правильная выборка из MYSQL

Правильная выборка из MYSQL

есть 2 таблицы в Mysql 1Таблицы inbox

183