Hello,

I am having trouble grasping the following issue intuitively --

sqlite> select * from node limit 3;
node_id     node_type   node_name      node_confidence
----------  ----------  -------------  ---------------
1           ACT         Mike Garrison  0.99932
2           ACT         Pat Cox        0.999193
3           ACT         Steve Weise    0.999149
sqlite> select count(*) from node;
count(*)
----------
17046
sqlite> select * from edge limit 3;
edge_id     from_node   to_node     edge_confidence  edge_type
----------  ----------  ----------  ---------------  ----------
1           Barry       Webster     0.998918         aa
2           Barry       Wright      0.998896         aa
3           Barton      Webster     0.998561         aa
sqlite> select count(*) from edge;
count(*)
----------
19252
sqlite> select e.edge_id, n1.node_id AS from_node_id
   ...> from edge e join node n1 on
   ...> e.from_node = n1.node_name limit 3;

edge_id     from_node_id
----------  ------------
1           3840
2           3840
3           7230
sqlite> select count(*) from edge e join node n1 on e.from_node = n1.node_name;
count(*)
----------
21632
sqlite>

My intuition says that the row count from the last select should not
be more than 19,252, the count of the left table (edge) in the join,
and, in fact, can be less as not all e.from_node may find a match in
n1.node_name. Instead, I am getting 21,632. In fact, when I create
another join using e.to_node, I get even more records as below, and I
am just not able to grasp why this is happening.

sqlite> select count(*) from edge e join node n1
   ...> on e.from_node = n1.node_name join
   ...> node n2 on e.to_node = n2.node_name;
count(*)
----------
25277
sqlite>
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to