声明未返回正确的数字或​​行

时间:2011-08-25 21:12:00

标签: sql

为什么第一个语句没有返回第二个数字?

select random_selection.randnum,
   random_selection.createddate,
   random_selection.ozip3, 
   random_selection.boxid, 
   random_selection.boxaddr, 
   random_selection.locdesc, 
   random_selection.loccity, 
   random_selection.lastmf,
   random_selection.lastsat,
   random_selection.boxtype,
   random_selection.svcclas,
   random_selection.dropzip5,
   dropper_city_brk_2.dropper_id
from random_selection, dropper_city_brk_2
where random_selection.ozip3 = dropper_city_brk_2.zip3
and dropper_city_brk_2.dropper_id <> 10002
and random_selection.dropper_id is null
order by dropper_id;

第二声明:

select count(*) from random_selection where dropper_id is null; 

2 个答案:

答案 0 :(得分:2)

您的查询不一样,因此您的记录数不会相同。您首先查询正在连接2​​个表,而您的第二个查询仅获取一个表的记录计数。另外,您的第一个查询中有WHERE个条款不在第二个查询中。

如果您希望第二个查询返回相同数量的记录,那么您必须使用与第一个相同的表和where子句

select count(*) 
from random_selection, dropper_city_brk_2
where random_selection.ozip3 = dropper_city_brk_2.zip3
and dropper_city_brk_2.dropper_id <> 10002
and random_selection.dropper_id is null

编辑:

select count(*) 
from random_selection 
INNER JOIN dropper_city_brk_2
  ON random_selection.ozip3 = dropper_city_brk_2.zip3
WHERE dropper_city_brk_2.dropper_id <> 10002
  and random_selection.dropper_id is null

这是visual explanation of JOINs,可能有助于作为参考。

答案 1 :(得分:0)

你的意思是“为什么第二个查询没有返回第一个查询给出的行数”?如果是这样,那么可能是因为第一个查询中的交叉连接和额外的where子句。

如果由于某种原因,您认为这些完全不同的查询应该产生相同数量的行,那么您必须告诉我们您的数据是如何构建的。