MySQL, имеющий предложение игнорировать идентификатор - PullRequest
1 голос
/ 27 августа 2011

Я пытаюсь вставить не повторяющийся job_id в review_job, но предложение и объединения не работают должным образом.

Пожалуйста, рассмотрите этот запрос

INSERT INTO review_jobs (job_id) 
SELECT B.JOB_ID FROM (
    SELECT A.job_id AS JOB_ID FROM jobs A 
    LEFT JOIN review_jobs RJ ON A.job_id=RJ.job_id 
    WHERE RJ.job_id IS NULL 
    HAVING A.post_date=MIN(A.post_date) 
    LIMIT 1
) B;

Приведенный выше запрос возвращает тот же job_id, который уже присутствует в review_jobs, если я удаляю пункт имения, в противном случае он не вставляется. Моя цель - поместить самую старую работу в таблицу review_jobs.

Ответы [ 4 ]

2 голосов
/ 27 августа 2011

Хочешь этого?

Самый старый job_id из заданий, которых еще нет в review_jobs

Если так, попробуйте это

INSERT INTO (job_id) 
SELECT A.job_id
FROM jobs A 
WHERE NOT EXISTS (SELECT * 
         FROM review_jobs RJ
         WHERE A.job_id=RJ.job_id)
ORDER BY A.post_date
LIMIT 1;
2 голосов
/ 27 августа 2011

Пара пунктов:

  1. Вам не нужно заключать запрос в подзапрос при использовании INSERT ... SELECT
  2. . Вы можете использовать комбинацию ORDER BY и LIMIT для получения первой или последней n записей.

Таким образом, запрос становится:

INSERT INTO review_jobs (job_id) 
    SELECT A.job_id
    FROM jobs A 
        LEFT JOIN review_jobs RJ ON A.job_id = RJ.job_id 
    WHERE RJ.job_id IS NULL
    ORDER BY A.post_date
    LIMIT 1
2 голосов
/ 27 августа 2011

Чтобы найти самую старую работу, вы можете использовать order by:

insert  review_jobs
        (job_id)
select  j.job_id
from    jobs j
left join
        review_jobs rj
on      j.job_id = rj.job_id
where   rj.job_id is null
order by
        j.post_date
limit   1
0 голосов
/ 27 августа 2011

HAVING является селектором группы, и в вашем выражении нет GROUP BY.Вместо этого попробуйте следующее:

...WHERE RJ.job_id IS NULL ORDER BY A.post_date ASC LIMIT 1

Вы также можете использовать подзапрос, например,

...WHERE RJ.job_id IS NULL AND NOT EXISTS (SELECT job_id FROM jobs WHERE post_date < A.post_date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...