是否可以在查询中使用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)
答案 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
中添加过滤器时,您可能会得到您的目标结果。