MySQL 使用 NOT IN 作为临时表

标签 mysql sql select

我希望能够在类别表中找到条件为 visible = 0 的行,而不是在下面的查询结果中:

SELECT c.id as cat_id, j.id
FROM category c
LEFT JOIN portfolio_job_category pjc
ON pjc.category_id = c.id
LEFT JOIN job j
ON j.id = pjc.job_id
WHERE c.visible = 0
AND j.end_date > CURRENT_DATE
GROUP BY c.id

有没有办法使用 NOT IN 来找到它?

我在下面尝试过,但这会永远循环并导致 mysqld 崩溃

SELECT c.id
FROM category c
WHERE c.id NOT IN
(SELECT c.id as cat_id, j.id
FROM category c
LEFT JOIN portfolio_job_category pjc
ON pjc.category_id = c.id
LEFT JOIN job j
ON j.id = pjc.job_id
WHERE c.visible = 0
AND j.end_date > CURRENT_DATE
GROUP BY c.id)
AND visible = 0

最佳答案

你不尝试使用 LEFT JOIN

SELECT  a.ID
FROM    category a
        LEFT JOIN
        (
            SELECT  c.id as cat_id
            FROM    category c
                    LEFT JOIN portfolio_job_category pjc
                        ON pjc.category_id = c.id
                    LEFT JOIN job j
                        ON j.id = pjc.job_id
            WHERE   c.visible = 0 AND 
                    j.end_date > CURRENT_DATE
        ) b ON a.ID = b.ID
WHERE   b.ID IS NULL AND
        a.visible = 0

关于MySQL 使用 NOT IN 作为临时表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14451007/

相关文章:

php - mysql: IF 'some columns value' 是 DISTINCT THEN 翻转 bool 值

MySQL:如何获取计数> 1 的记录?

mysql - 只选择多次出现的一个条目

python - 使用 django 形式更新表中某些特定范围的行的单列

MySQL交叉选择限制问题

mysql - 为什么 RAND() 在 SQL 子查询中搞砸了?

sql - MS Access - 在 VBA 中按名称执行保存的查询

mysql - 无法访问 mysql 表,收到它已崩溃的消息

php - 如何在 X 时间后仅发送一次电子邮件

mysql - 从表单获取客户详细信息时如何将客户添加到订单