如何编写具有2个状态的查询?

时间:2013-12-01 09:22:33

标签: sql sqlite join

我有表客户

Id  Code    Name
1   100     John
2   200     Jack
3   300     Mike
4   400     Betty

SaleType

Id  Code    Name
1   1000    cash
2   2000    cheque
3   3000    free

一张表格,描述哪个客户的销售类型名为 SaleType_Customer

Id  SaleTypeID  CustomerID
1   1           1
2   1           2
3   2           1
4   2           3

我想编写一个采用客户的 SaleTypes 的查询。但是,如果客户不在表 SaleType_Customer 中,则查询将返回所有 SaleTypes 。我该如何撰写此查询?

我的查询:

SELECT  SaleType.ID, SaleType.Code, SaleType.Name
 FROM SaleType left outer join SaleType_Customer on SaleType.Id = SaleType_Customer.SaleTypeID 

Where SaleType_Customer.CustomerID= 1 

我想要John的结果(id = 1):

Id  Code    Name
1   1000    cash
2   2000    cheque

对于Betty(id = 4)已经完成,因为她不在 SaleType_Customer

Id  Code    Name
1   1000    cash
2   2000    cheque
3   3000    free

我该如何撰写查询?

2 个答案:

答案 0 :(得分:1)

SELECT SaleType.ID, SaleType.Code, SaleType.Name
  FROM SaleType
 WHERE NOT EXISTS (SELECT *
          FROM SaleType_Customer
         WHERE SaleType_Customer.Customerid = 4)
UNION

SELECT SaleType.ID, SaleType.Code, SaleType.Name
  FROM SaleType
 INNER JOIN SaleType_Customer
    ON SaleType_Customer.Saletypeid = SaleType.Id
 WHERE SaleType_Customer.Customerid = 4

Sqlfiddle sample (oracle)

答案 1 :(得分:1)

SELECT distinct SaleType.ID, SaleType.Code, SaleType.Name
 FROM Customer left join SaleType_Customer  
on CustomerID = Customer.Id 
,SaleType
where (SaleTypeID = SaleType.Id or SaleTypeID is NULL)
and Customer.ID= 4;

以下是SQLFiddle