Understood. Thank you for discussing this with me. Your help is greatly appreciated.
-- Rich On Thu, Dec 3, 2009 at 5:03 PM, Pavel Ivanov <paiva...@gmail.com> wrote: >> Can I ask a follow up question? "from foo, >> bar"... is this behaving like a join? I saw this before and didn't >> quite understand it, I just realized it permuted all rows of the each >> table together (which sounds like a join with no conditions). > > Yes, it is join. What you seem to talk about is a cartesian product > and this would be it if it wasn't WHERE clause. With WHERE clause it > is inner join - SQLite gets smaller of two tables (foo and bar) and > for each row in it scans another table for rows satisfying WHERE > condition. And this behavior is the same as for your query if your foo > table is smaller than bar. But in case if you create index on (col2, > col3) in biggest of the tables foo or bar then my query will work an > order of magnitude faster than yours. > > > Pavel > > On Thu, Dec 3, 2009 at 4:54 PM, Rich Rattanni <ratta...@gmail.com> wrote: >> Awesome! Thank you. Can I ask a follow up question? "from foo, >> bar"... is this behaving like a join? I saw this before and didn't >> quite understand it, I just realized it permuted all rows of the each >> table together (which sounds like a join with no conditions). >> >> Second, I came up with my own solution: >> >> select * from foo >> where col1 || col2 in (select col1 || col2 from bar) >> >> This also works, but from an efficiency standpoint I assume this is >> horrible since it would basically be a series of string compare >> operations. However, if the number of rows in each table is VERY >> LARGE (lets say 50,000) would my solution maybe outperform the first >> (on the surface seems like n^2 vs n*S where S is concat string length >> (which will always be < 50)). >> >> On Thu, Dec 3, 2009 at 4:39 PM, Pavel Ivanov <paiva...@gmail.com> wrote: >>> Maybe >>> >>> select distinct bar.* from foo, bar >>> where foo.col2 = bar.col2 and foo.col3 = bar.col3 >>> >>> It's not clear from your requirements written below whether you need >>> 'distinct' here or not but I've added it just in case... >>> >>> >>> Pavel >>> >>> On Thu, Dec 3, 2009 at 4:34 PM, Rich Rattanni <ratta...@gmail.com> wrote: >>>> Suppose I have the following two tables >>>> >>>> foo: >>>> 10 | A | A >>>> 20 | B | B >>>> 30 | C | C >>>> >>>> and >>>> >>>> bar: >>>> 1 | A | X >>>> 2 | B | C >>>> 3 | A | A >>>> 4 | C | A >>>> 5 | B | B >>>> >>>> >>>> I want to select all the rows in table bar where the second and third >>>> column match an entry found in foo (that is to say, I want my result >>>> to be 3 | A | A and 5 | B | B. >>>> >>>> My attempt of: >>>> select * from bar >>>> where col2 in (select col2 from foo where bar.col2 = col2) >>>> and col3 in (select col3 from foo where bar.col3 = col3) >>>> >>>> Does not work, and I understand that is should not (it returns 2 | B | >>>> C, 3 | A | A, 4 | C | A, 5 | B | B). >>>> >>>> Could someone give me a hand? >>>> >>>> -- >>>> Rich >>>> _______________________________________________ >>>> sqlite-users mailing list >>>> sqlite-users@sqlite.org >>>> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >>>> >>> _______________________________________________ >>> sqlite-users mailing list >>> sqlite-users@sqlite.org >>> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >>> >> _______________________________________________ >> sqlite-users mailing list >> sqlite-users@sqlite.org >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >> > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users