That depends on what you mean by "Could this be achieved in SQLite?".

There is no query (in any SQL engine) that can depend on a sub-query that is itself dependent on the outcome of the main query. This is what makes recursion beautiful, but then there is also no CTE (or other query in any SQL engine) that can recurse over multiple states of data (i.e. query data in one single query to reflect results from both before and after a delete in the source table), nor can a CTE be updated or deleted from, its data must persist atomically (with some exceptions when using non-deterministic functions, like random).

These are not so much "inabilities" of SQL engines, but more due to explicit SQL and set-algebra rules.

So this is not possible in a single query.

You can of course "achieve" it using any SQL engine by constructing a temporary table, and then repeatedly run a DELETE query for all x values where COUNT(y) is less than nY, then DELETE all y values where COUNT(x) < nX, rinse, repeat untilĀ  both SELECT y HAVING COUNT(x) < nX and SELECT x HAVING COUNT(y) < nY aggregate queries return empty sets - but this would be painfully slow next to a simple software algorithm that prunes/resolves a 2-dimensional array - exponentially worse so for larger grid sizes.


On 2018/05/01 2:45 AM, Roman Fleysher wrote:
Dear SQLiters,

I have trouble solving this problem, maybe it is impossible?

I have a table with two columns x and y, both integers. Imagine they are 
coordinates on X-Y plane, dots. I need to find all x's that have more than nX 
dots, and all y's that have more than nY dots. Both conditions must be 
simultaneous in the following sense:

If x=10 has less than nX dots, all dots with x=10 are deleted. Because of 
deletion, y=3 which previously had more than nY dots no longer passes the 
threshold and thus y=3 must be deleted too. This could cause deletion of some 
other x, etc. At the end, number of dots on all vertical lines must be more 
than nX and number of dots on all horizontal lines must be more than nY.

Could this be achieved with SQLite?

Roman
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to