Sql 带表条件的Where子句

Sql 带表条件的Where子句,sql,Sql,我想写一个查询,它将根据卡车的状态过滤返回的行数。如果我只希望看到尚未关闭的卡车,我将从UI发送一个值'1',发送一个'2'以查看所有卡车 select * from invoice left outer join truck on (invoice.invnum = truck.invnum) 这将返回正确的行数 问题: 我需要一个where子句,它将查看truck表的close\u date字段,并确定它是否为null。这里是一个问题,如果在卡车表中没有找到记录,仍然从发票表返回

我想写一个查询,它将根据卡车的状态过滤返回的行数。如果我只希望看到尚未关闭的卡车,我将从UI发送一个值
'1'
,发送一个
'2'
以查看所有卡车

select *
from invoice left outer
join truck
     on (invoice.invnum = truck.invnum)
这将返回正确的行数

问题: 我需要一个where子句,它将查看truck表的
close\u date
字段,并确定它是否为null。这里是一个问题,如果在卡车表中没有找到记录,仍然从发票表返回该行

select *
from invoice left outer
join truck
     on (invoice.invnum = truck.invnum)
where UI.value = (select close_date from truck where invoice.invnum = truck.invnum) “if no record is returned here, return the value ‘2’

请澄清你的问题。你想做这样的事吗

select *
from 
    invoice 
     left outer join 
    truck on 
        invoice.invnum = truck.invnum
where 
    (UI.value = 1 AND truck.close_date IS NULL) OR
    (UI.value = 2)
还是你想这么做

select *
from 
    invoice 
     left outer join 
    truck on 
        invoice.invnum = truck.invnum
where UI.Value = 
  (
    SELECT CASE WHEN MAX(close_date) IS NULL THEN 2 ELSE 1 END 
    FROM truck 
    WHERE invoice.invnum = truck.invnum)

我想你有点误解了
where
条款。或者至少在这里它能为你做些什么。您是否可以将其放入一个封装在
if
语句中的存储过程中?