我尝试查询从表 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/