0

我的 sqlite 数据库中有两张表 - 招标和批次。

标书:

id
name
address

很多:

id
tender_id # it's tender's ID from table `tenders`
summ

一份标书可能有很多批次。如何计算有 0 手的投标?

我尝试了以下查询:

select lots.* from lots
inner join tenders on tenders.id = lots.tender_id
group by lots.id
having count(*) =0

SELECT COUNT(tenders.id) AS cnt FROM tenders, lots WHERE lots.tender_id = tenders.id group by tenders.id having cnt=0

没有结果。但是当我尝试做

select * from lots where tender_id=263128

结果我看到 0 行。

谢谢你。

4

4 回答 4

0
SELECT tenders.id 
FROM tenders 
WHERE tenders.id NOT IN (SELECT tender_id FROM lots)

或不同数量的批次:

SELECT tenders.id
FROM tenders
WHERE tenders.id IN 
(
SELECT tender_id FROM lots GROUP BY tender_id HAVING COUNT(*) IN (2,3)
)
于 2013-10-17T08:24:20.770 回答
0

您的连接尝试看起来很有希望,但是您当然不会得到任何结果,因为您是从很多中选择的。

我会反过来做,让它成为left join你可以检查null很多东西的方式

select
        tenders.id
    from tenders
    left join lots on tenders.id = lots.tender_id
    where lots.tender_id is null

或者,如果您想检查每个投标的特定手数:

select
        tenders.id
    from tenders
    left join lots on tenders.id = lots.tender_id
    group by tenders.id
    having count(*) = 2
于 2013-10-17T08:28:28.387 回答
0

使用子查询:

SELECT id, (SELECT COUNT() FROM lots WHERE tender_id=tenders.id) AS LotCount FROM tenders;
于 2013-10-17T09:30:32.023 回答
0

你好,对你有帮助...

SELECT * FROM (
SELECT T.*, (SELECT COUNT(*) FROM lots L WHERE L.empid = T.empid) AS 'RecordFound'  
FROM tenders AS T) TendersLots
WHERE RecordFound = 0

谢谢你,维沙尔·帕特尔

于 2013-10-17T09:31:23.710 回答