首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计数子行?

如何计数子行?
EN

Stack Overflow用户
提问于 2013-10-17 08:08:33
回答 4查看 65关注 0票数 0

我的sqlite数据库里有两张桌子--投标书和很多东西。

招标:

代码语言:javascript
复制
id
name
address

批次:

代码语言:javascript
复制
id
tender_id # it's tender's ID from table `tenders`
summ

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

我尝试了一些查询,例如:

代码语言:javascript
复制
select lots.* from lots
inner join tenders on tenders.id = lots.tender_id
group by lots.id
having count(*) =0

代码语言:javascript
复制
SELECT COUNT(tenders.id) AS cnt FROM tenders, lots WHERE lots.tender_id = tenders.id group by tenders.id having cnt=0

没有结果。但当我试着做

代码语言:javascript
复制
select * from lots where tender_id=263128

因此,我看到0行。

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-17 08:24:20

代码语言:javascript
复制
SELECT tenders.id 
FROM tenders 
WHERE tenders.id NOT IN (SELECT tender_id FROM lots)

或不同数量的批次:

代码语言:javascript
复制
SELECT tenders.id
FROM tenders
WHERE tenders.id IN 
(
SELECT tender_id FROM lots GROUP BY tender_id HAVING COUNT(*) IN (2,3)
)
票数 0
EN

Stack Overflow用户

发布于 2013-10-17 08:28:28

您使用连接的尝试看起来很有希望,但当然没有结果,因为您从很多地方进行选择。

我会把它变成一个left join,这样你就可以在很多地方检查null

代码语言:javascript
复制
select
        tenders.id
    from tenders
    left join lots on tenders.id = lots.tender_id
    where lots.tender_id is null

或者,如果你想对照每一份标书的具体批次进行核对:

代码语言:javascript
复制
select
        tenders.id
    from tenders
    left join lots on tenders.id = lots.tender_id
    group by tenders.id
    having count(*) = 2
票数 0
EN

Stack Overflow用户

发布于 2013-10-17 09:30:32

使用子查询:

代码语言:javascript
复制
SELECT id, (SELECT COUNT() FROM lots WHERE tender_id=tenders.id) AS LotCount FROM tenders;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19421337

复制
相关文章

相似问题

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