MySQL具有子句忽略id
我试图在review_作业中插入一个不重复的作业id,但having子句和JOIN不能正常工作MySQL具有子句忽略id,mysql,sql,Mysql,Sql,我试图在review_作业中插入一个不重复的作业id,但having子句和JOIN不能正常工作 请考虑此查询 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.p
请考虑此查询
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;
如果我删除having子句,则上面的查询将带来与review_作业中已存在的相同的作业\u id,否则它不会插入。我的目标是将最早的作业放在review_jobs表中。要查找最早的作业,可以使用order by:
要查找最早的作业,可以使用order by: 你想要这个吗 来自尚未在审阅作业中的作业的最旧作业\u id 如果是,试试这个
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;
你想要这个吗
来自尚未在审阅作业中的作业的最旧作业\u id
如果是,试试这个
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;
有两点:
使用INSERT时,不需要将查询包装在子查询中。。。选择
您可以使用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
有两点:
使用INSERT时,不需要将查询包装在子查询中。。。选择
您可以使用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
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)
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)