首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql查询仅显示未售出的招标

sql查询仅显示未售出的招标
EN

Stack Overflow用户
提问于 2014-04-12 17:02:07
回答 3查看 136关注 0票数 1

我有以下表格:

招标主任:

代码语言:javascript
复制
tenderid   tendername 
1           kjnj
2           hjbhb
3          abc

投标大师:

代码语言:javascript
复制
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

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

我想要这样的产出:

代码语言:javascript
复制
tendername
abc

这里只有第三份标书的名称,因为它不会卖给任何人。这里,招标1被出售给userid 104,所以它不会来,而招标2被卖给userid 101,所以它也不会来。

我写过这样的查询:

代码语言:javascript
复制
select t.tendername 
from tender_master t,bid master b 
where t.tenderid==b.tenderid 
    and b.status=='unsold'

但它给了我所有的投标的名字。

有人能给我提供正确的查询吗?求你了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-12 17:19:06

试试这个:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-04-12 17:15:23

用单个=而不是==来尝试它。

票数 2
EN

Stack Overflow用户

发布于 2014-04-12 19:06:47

另一种方法是检查招标组中是否存在“出售”状态。

代码语言:javascript
复制
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,请将最后一行更改为

代码语言:javascript
复制
HAVING   SUM(DECODE(Status, 'sold', 1, 0)) = 0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23033492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档