<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><div><blockquote type="cite" class=""><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">So SQL over JSON = Turing Tarpit.</div></div></blockquote><div><br class=""></div>Yep. Fair summary.<div class=""><br class=""></div><div class="">Dana</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">P.S. BTW, in the complexity of the the simple query below, I forgot that every nested query has also a</div><div class="">sortby.</div><div class=""><br class=""></div><div class="">And the nested queries are not un-nestable :-)))</div><div class=""><br class=""></div><div class="">I even wonder if such queries can be written in SQL-99…:-)</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><br class=""></div><div class="">Fair summarisation?</div></div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Mon, Jun 1, 2015 at 5:28 PM, Michael Kay <span dir="ltr" class=""><<a href="mailto:mike@saxonica.com" target="_blank" class="">mike@saxonica.com</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class=""><span class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class=""><span class=""><div class=""><br class=""></div></span>Well, if you’re going to apply SQL to JSON (say), then the first thing you have to do is define a mapping from JSON to tables. That’s not difficult to do.</div><div class=""><br class=""></div><div class="">If by the “closure property” you want the result of any SQL query to be the representation of some JSON structure, then you’re not going to achieve that. That’s essentially the same as the update problem.</div><div class=""><br class=""></div></div></blockquote><div class=""><br class=""></div><div class="">So pretty much no  subqueries (ok somebody is going to say that any query entailing a subquery can be rewritten without one) but AFAIC  the language you are talking about isn't really SQL then. </div></div></div></div></div></blockquote><div class=""><br class=""></div></span><div class="">I don’t follow. You can write any query you like; it’s just that the result is a table that might not be mappable back to JSON.</div><span class=""><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class=""><span class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><br class=""></div></div></div></blockquote></span></div></div></blockquote><div class="">So I'm SOL if it's a date then. </div></div></div></div></div></blockquote><div class=""><br class=""></div></span>You won’t get any dates in the table representation of JSON, but you can get them in tables returned by a query.<span class=""><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="gmail_extra"><div class="gmail_quote"><div class=""> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class=""><span class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""></div><div class=""><br class=""></div></div></div></blockquote></span></div></div></blockquote><div class="">Forgive me if I'm wrong. But I still don't believe I can write a statement that gets me the 5th row of the table.</div></div></div></div></div></blockquote><div class=""><br class=""></div></span><div class="">Well, a typical representation of a JSON array [“a”, “b”, “c”] might be the table</div><div class=""><br class=""></div><div class="">ARRAYS</div><div class="">ID       INDEX    TYPE   VALUE</div><div class="">001     0             String   “a”</div><div class="">001     1             String   “b”</div><div class="">001     2             String   “c”</div><div class=""><br class=""></div><div class="">and the query to get item 2 of array 001 would be</div><div class=""><br class=""></div><div class="">SELECT TYPE, VALUE FROM ARRAYS WHERE ID=001 AND INDEX=2</div><div class=""><br class=""></div><div class="">As far as I understand it this is similar to the mapping that SQL Server uses for XML.</div><span class=""><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="gmail_extra"><div class="gmail_quote"><div class=""> </div><div class=""><br class=""></div><div class="">How would you  predict a priori what your table and column names would be and how many of them. </div></div></div></div></div></blockquote><div class=""><br class=""></div></span><div class="">If you’ve got no schema then you have to use a generic mapping in which the table and column names are generic concepts such as ARRAY, MAP, etc.</div><span class=""><div class=""><br class=""></div><br class=""><blockquote type="cite" class=""><div dir="ltr" class=""><div class="gmail_extra"><div class="gmail_quote"><div class=""><br class=""></div><div class=""><br class=""></div><div class="">If you don't can't predict the schema your semi-structured is going to generate then  how could you write your query. </div></div></div></div></blockquote><br class=""></span></div><div class="">With difficulty. I can’t see anyone wanting to write it by hand.</div><span class="HOEnZb"><font color="#888888" class=""><div class=""><br class=""></div><div class="">Michael Kay</div><div class="">Saxonica</div></font></span></div></blockquote></div><br class=""></div>
</div></blockquote></div><br class=""></div></body></html>