2013-10-17 47 views
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行作为结果。

谢谢。

+0

请不要忘记,以纪念一个答案所接受,也许给一票;) – DrCopyPaste

回答

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) 
) 
+0

谢谢,它的作品!但是如果我魔杖不仅检查0个批次,该怎么办?举个例子 - 哪些招标有1或2或6行? – udi

+0

加入我的回答 – Wietze314

+0

非常感谢! – udi

0

你尝试了加入看起来很有希望,而是因为你从很多选择,当然你不会得到结果。

我将围绕做它的其他方式,并使其成为left join这样你可以在很多

或者检查null如果要核对大量每次招标的具体数量:

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

谢谢你的帮助。请查看我对上述消息的评论,并告诉我如何更改此查询以应用新条件。 – udi

+0

@udi更新了 – DrCopyPaste

+0

非常感谢! – udi

0

使用子查询:

SELECT id, (SELECT COUNT() FROM lots WHERE tender_id=tenders.id) AS LotCount FROM tenders; 
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 

谢谢 维沙尔帕特尔