Mysql 对多个表使用NOT IN语句的简化方法
如何简化此查询?不幸的是,这不起作用Mysql 对多个表使用NOT IN语句的简化方法,mysql,sql,database,Mysql,Sql,Database,如何简化此查询?不幸的是,这不起作用 $Query = mysqli_query($conn, "SELECT * FROM order_number where trans_id NOT IN (SELECT order_no from billing) AND NOT IN(SELECT order_no from pending) AN
$Query = mysqli_query($conn, "SELECT * FROM order_number where trans_id NOT IN (SELECT order_no from billing)
AND NOT IN(SELECT order_no from pending)
AND NOT IN(SELECT order_no from on_process)
AND NOT IN(SELECT order_no from finished)");
还有别的办法吗?我正在尝试打印trans_id行,如果它不在计费、挂起、在_进程中且已完成
SELECT * FROM order_number
where trans_id NOT IN
(
SELECT order_no from billing
union
SELECT order_no from pending
union
SELECT order_no from on_process
union
SELECT order_no from finished
)
或者当你尝试的时候
SELECT * FROM order_number
where trans_id NOT IN (SELECT order_no from billing)
AND trans_id NOT IN (SELECT order_no from pending)
AND trans_id NOT IN (SELECT order_no from on_process)
AND trans_id NOT IN (SELECT order_no from finished)
或者当你尝试的时候
SELECT * FROM order_number
where trans_id NOT IN (SELECT order_no from billing)
AND trans_id NOT IN (SELECT order_no from pending)
AND trans_id NOT IN (SELECT order_no from on_process)
AND trans_id NOT IN (SELECT order_no from finished)
或者当你尝试的时候
SELECT * FROM order_number
where trans_id NOT IN (SELECT order_no from billing)
AND trans_id NOT IN (SELECT order_no from pending)
AND trans_id NOT IN (SELECT order_no from on_process)
AND trans_id NOT IN (SELECT order_no from finished)
或者当你尝试的时候
SELECT * FROM order_number
where trans_id NOT IN (SELECT order_no from billing)
AND trans_id NOT IN (SELECT order_no from pending)
AND trans_id NOT IN (SELECT order_no from on_process)
AND trans_id NOT IN (SELECT order_no from finished)
您可以在表上进行左联接,并筛选出没有匹配记录的记录:
select
n.*
from
order_number n
left join billing b on b.order_no = n.trans_id
left join pending p on p.order_no = n.trans_id
left join on_process o on o.order_no = n.trans_id
left join finished f on f.order_no = n.trans_id
where
b.order_no is null and
p.order_no is null and
o.order_no is null and
f.order_no is null
您可以在表上进行左联接,并筛选出没有匹配记录的记录:
select
n.*
from
order_number n
left join billing b on b.order_no = n.trans_id
left join pending p on p.order_no = n.trans_id
left join on_process o on o.order_no = n.trans_id
left join finished f on f.order_no = n.trans_id
where
b.order_no is null and
p.order_no is null and
o.order_no is null and
f.order_no is null
您可以在表上进行左联接,并筛选出没有匹配记录的记录:
select
n.*
from
order_number n
left join billing b on b.order_no = n.trans_id
left join pending p on p.order_no = n.trans_id
left join on_process o on o.order_no = n.trans_id
left join finished f on f.order_no = n.trans_id
where
b.order_no is null and
p.order_no is null and
o.order_no is null and
f.order_no is null
您可以在表上进行左联接,并筛选出没有匹配记录的记录:
select
n.*
from
order_number n
left join billing b on b.order_no = n.trans_id
left join pending p on p.order_no = n.trans_id
left join on_process o on o.order_no = n.trans_id
left join finished f on f.order_no = n.trans_id
where
b.order_no is null and
p.order_no is null and
o.order_no is null and
f.order_no is null
没有理由“简化”查询。如果在四个子查询中的表上有适当的索引,它应该是非常有效的。如果任何表中的orderno
可能为NULL
,那么我建议使用notexists
:
SELECT *
FROM order_number o
WHERE NOT EXISTS (select order_no from billing where b.order_no = o.trans_id) AND
NOT EXISTS (select order_no from pending p where p.order_no = o.trans_id) AND
NOT EXISTS (select order_no from on_process op where op.order_no = o.trans_id) AND
NOT EXISTS (select order_no from finished f where f.order_no = o.trans_id);
正确的索引是:计费(订单号)
,挂起(订单号)
,完成(订单号)
,以及关于流程(订单号)
,没有理由“简化”查询。如果在四个子查询中的表上有适当的索引,它应该是非常有效的。如果任何表中的orderno
可能为NULL
,那么我建议使用notexists
:
SELECT *
FROM order_number o
WHERE NOT EXISTS (select order_no from billing where b.order_no = o.trans_id) AND
NOT EXISTS (select order_no from pending p where p.order_no = o.trans_id) AND
NOT EXISTS (select order_no from on_process op where op.order_no = o.trans_id) AND
NOT EXISTS (select order_no from finished f where f.order_no = o.trans_id);
正确的索引是:计费(订单号)
,挂起(订单号)
,完成(订单号)
,以及关于流程(订单号)
,没有理由“简化”查询。如果在四个子查询中的表上有适当的索引,它应该是非常有效的。如果任何表中的orderno
可能为NULL
,那么我建议使用notexists
:
SELECT *
FROM order_number o
WHERE NOT EXISTS (select order_no from billing where b.order_no = o.trans_id) AND
NOT EXISTS (select order_no from pending p where p.order_no = o.trans_id) AND
NOT EXISTS (select order_no from on_process op where op.order_no = o.trans_id) AND
NOT EXISTS (select order_no from finished f where f.order_no = o.trans_id);
正确的索引是:计费(订单号)
,挂起(订单号)
,完成(订单号)
,以及关于流程(订单号)
,没有理由“简化”查询。如果在四个子查询中的表上有适当的索引,它应该是非常有效的。如果任何表中的orderno
可能为NULL
,那么我建议使用notexists
:
SELECT *
FROM order_number o
WHERE NOT EXISTS (select order_no from billing where b.order_no = o.trans_id) AND
NOT EXISTS (select order_no from pending p where p.order_no = o.trans_id) AND
NOT EXISTS (select order_no from on_process op where op.order_no = o.trans_id) AND
NOT EXISTS (select order_no from finished f where f.order_no = o.trans_id);
正确的索引是:
计费(订单号)
,挂起(订单号)
,完成(订单号)
,以及关于流程(订单号)
@phenomenon09记住接受或发布您自己的解决方案作为答案,我建议不存在而不是不存在,因为这可能是OP想要的。(子选择中为空…)如果您关心性能,请不要在子查询中使用带有union
的版本。@现象09请记住接受或发布您自己的解决方案作为答案,我建议不存在而不是不存在,因为这可能是OP想要的。(子选择中为空…)如果您关心性能,请不要在子查询中使用带有union
的版本。@现象09请记住接受或发布您自己的解决方案作为答案,我建议不存在而不是不存在,因为这可能是OP想要的。(子选择中为空…)如果您关心性能,请不要在子查询中使用带有union
的版本。@现象09请记住接受或发布您自己的解决方案作为答案,我建议不存在而不是不存在,因为这可能是OP想要的。(子选项中的空值…)如果您关心iota的性能,请不要在子查询中使用带有union
的版本。是否有特定原因导致账单、挂起、正在处理和已完成不是订单表中的状态?是否有特定原因导致账单、挂起、,on_process和finished不是订单表中的状态?是否有特定原因说明billing、pending、on_process和finished不是订单表中的状态?是否有特定原因说明billing、pending、on_process和finished不是订单表中的状态?