我可以在where条件中使用select语句

时间:2016-10-17 08:57:41

标签: mysql sql

是否可以在查询中使用where条件和另一个select语句。例如:

WHERE main_section ='Supplier' AND type_of_pay ='Advance' AND 
((select final_dateofpay FROM com_payments
WHERE main_section ='Supplier') IS NOT NULL)

2 个答案:

答案 0 :(得分:1)

您不能在where子句中使用这样的子查询,因为您的代码

(select final_dateofpay FROM com_paymentsWHERE main_section ='Supplier') 返回多行。因此,它不能直接与IS NOT NULL结合使用 。记住where子句在行级运行。

但是,我认为您要检查子查询是否返回结果。在这种情况下,您可以像这样使用它

WHERE main_section ='Supplier' AND type_of_pay ='Advance' AND exists (select final_dateofpay FROM com_payments WHERE main_section ='Supplier')

答案 1 :(得分:1)

SQL标准允许包含IN (...)NOT IN (...)EXISTS (...)NOT EXISTS(...)等语句的大量子查询表达式。< / p>

在这种情况下,查询将是:

WHERE main_section ='Supplier' AND type_of_pay ='Advance' AND 
  EXISTS (select final_dateofpay FROM com_payments
    WHERE main_section ='Supplier'))

此查询的效果是您要么不会获得任何行,因为不存在任何com_payments main_section 'Supplier'或所有原始行,因为确实存在。

这个奇怪结果的原因是您没有引用子查询中包含select语句的任何字段。在引用主查询的子查询where中添加过滤器时,您可能会得到您的目标结果。