Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL具有子句忽略id_Mysql_Sql - Fatal编程技术网

MySQL具有子句忽略id

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

我试图在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.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)