sql查询只显示未售出的招标

时间:2014-04-12 17:02:07

标签: sql sql-server

我有以下表格:

招标大师:

tenderid   tendername 
1           kjnj
2           hjbhb
3          abc

Bid Master:

bidid     tenderid       userid            status 
1          1             100            unsold
2          1             101            unsold
3          1             102            unsold
4          1             104            sold
5          2             100            unsold
6          2             101            sold
7          3             100            unsold
8          3             101            unsold
9          3             102            unsold

现在我只想显示那些未售出的招标名称,即未售出。

我想要这样的输出:

tendername
abc

这里只有第三次招标的名称才会出售,因为它不会出售给任何人。 这里,招标1被出售给用户ID 104,因此它不会来,并且招标2被出售给用户ID 101 所以它也不会来。

我写了这样的查询:

select t.tendername 
from tender_master t,bid master b 
where t.tenderid==b.tenderid 
    and b.status=='unsold'

但它给了我所有的招标名称。

谁能请我提供正确的查询? 拜托。

3 个答案:

答案 0 :(得分:2)

尝试使用一个=代替==

答案 1 :(得分:2)

试试这个:

SELECT
   tendername
FROM [Tender Master] TM
WHERE NOT EXISTS
      (
          SELECT 1 FROM [Bid Master] BM
          WHERE TM.tenderid = BM.tenderid
          AND BM.status = 'sold'
      )

答案 2 :(得分:0)

另一种方法是检查投标组中是否有“已售出”状态

SELECT   TenderName
FROM     TenderMaster TM
         INNER JOIN BidMaster BM ON TM.TenderID = BM.TenderID
GROUP BY TenderName
HAVING   SUM(CASE Status WHEN 'sold' THEN 1 ELSE 0 END) = 0

如果您使用的是Oracle,请将最后一行更改为

HAVING   SUM(DECODE(Status, 'sold', 1, 0)) = 0