我有以下表格:
招标大师:
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'
但它给了我所有的招标名称。
谁能请我提供正确的查询? 拜托。
答案 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