mysql - 从表中选择排除表 2 中的值?

标签 mysql sql

我尝试查询从表 log 中获取数据,但不包括表 userlog 中的数据:

SELECT * FROM (`log`) LEFT JOIN `userlog` ON `userlog`.`userlogIdLog` = `log`.`LogId` 

WHERE (logTypeCategory = 0 AND LogType = 1) OR (logTypeCategory = 19 AND LogType = 1) 
OR (logTypeCategory = 0 AND LogType = 4) OR (logTypeCategory = 0 AND LogType = 8)
OR (logTypeCategory = 0 AND LogType = 12) OR (logTypeCategory = 2 AND LogType = 3)
OR (logTypeCategory = 0 AND LogType = 7) OR (logTypeCategory = 459 AND LogType = 9) 
OR (logTypeCategory = 456 AND LogType = 3) 

AND `userlogStatus` is null or userlogStatus <> 1 
AND `userlog`.`userlogIdUser` = '458' ORDER BY `LogId` DESC

但是这个查询显示了 log 中的行,尽管在表 userlog 中存在行:userlogIdLog = 1 AND userlogStatus = 1 AND userlogIdUser = 458

我在你的帮助下编辑:

select * from `log` as a 
where not exists ( select 1 from `userlog` as b where b.`userlogIdLog` = a.`LogId` AND b.`userlogIdUser` = 458 ) 

 AND (logTypeCategory = 0 AND LogType = 1)

 OR (logTypeCategory = 19 AND LogType = 1)
 OR (logTypeCategory = 0 AND LogType = 4) 
 OR (logTypeCategory = 0 AND LogType = 8) 
 OR (logTypeCategory = 0 AND LogType = 12) 
 OR (logTypeCategory = 2 AND LogType = 3) 
 OR (logTypeCategory = 0 AND LogType = 7) 
 OR (logTypeCategory = 459 AND LogType = 9) 
 OR (logTypeCategory = 456 AND LogType = 3)

但这并不正确

最佳答案

有几种方法可以从一个表中选择数据不在另一个表中的数据:

例如

select *
from `log`
where `LogId` not in 
(
    select `userlogIdLog`
    from `userlog`
)

select *
from `log` as a
where not exists 
(
    select 1
    from `userlog` as b
    where b.`userlogIdLog` = a.`LogId`
)

...然后在您选择上述语句之后,添加您的其余逻辑;即

AND 
(
       (logTypeCategory = 0 AND LogType = 1)
    OR (logTypeCategory = 19 AND LogType = 1)
    OR (logTypeCategory = 0 AND LogType = 4) 
    OR (logTypeCategory = 0 AND LogType = 8) 
    OR (logTypeCategory = 0 AND LogType = 12) 
    OR (logTypeCategory = 2 AND LogType = 3) 
    OR (logTypeCategory = 0 AND LogType = 7) 
    OR (logTypeCategory = 459 AND LogType = 9) 
    OR (logTypeCategory = 456 AND LogType = 3)
)

关于mysql - 从表中选择排除表 2 中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26661682/

相关文章:

sql - Rmarkdown - 使用表名作为动态 sql block 中的变量?

mysql - 尽管我使用 "IN"关键字,但子查询返回多于 1 行错误

运行 mysql 查询时的 Python 'TypeError: not enough arguments for format string'

mysql - 从表中最多选择 2 条记录

php - MD5在sql查询中发布数据

mysql - 统计 mysql 日志的条目数

php - 多值插入复选框只有最后一个值正在进入数据库

mysql - SQL : Calculating Percentage by joining a sub table to another

mysql - 记录查询在 mysql 中缺少索引

php - 当我向其中添加 LIMIT 关键字时,SQL 不工作