<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>SQL Server (και άλλες databases)</title><link>https://www.dotnetzone.gr:443/cs/forums/28/ShowForum.aspx</link><description>Θέματα που αφορούν τον SQL Server (7.0, 2000, 2005) αλλά και Oracle, Access, DB2, MySQL, κλπ.</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Re: Recursive queries</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/231.aspx</link><pubDate>Wed, 06 Oct 2004 07:57:50 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:231</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/231.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=231</wfw:commentRss><description>Recursive? ΚΑΚΟ-ΚΑΚΟ-ΚΑΚΟ-ΚΑΚΟ-ΚΑΚΟ-ΚΑΚΟ-ΚΑΚΟ-ΚΑΚΟ-ΚΑΚΟ-ΚΑΚΟ-ΚΑΚΟ&lt;br /&gt;&lt;br /&gt;Και αυτά που υπάρχουν στην Oracle είναι ψιλοχακιά. Από πίσω η Oracle δημιουργεί ένα Temporary View το οποίο υλοποιεί την ιεραρχία σαν self-join. Νομίζω χρησιμοποιεί και cursor (φτού κ**ά!). Συντακτικά μπορεί να βολεύει αλλά από πλευράς απόδοσης έχει το ίδιο πρόβλημα με το να έγραφες το SQL με το χέρι.&lt;br /&gt;&lt;br /&gt;Το κόλπο για να φτιάξεις ιεραρχίες, και μάλιστα με ΑΠΛΗ SQL είναι να καταλάβεις ότι και η ιεραρχία είναι σχέση συνόλων. O Joe Celko στο βιβλίο του SQL for Smarties περιγράφει ένα τρόπο να φτιάξεις ιεραρχίες με τη χρήση ενός βοηθητικού πίνακα πετυχαίνοντας άριστη απόδοση. Τη λύση αυτή την περιγράφει και σε ένα παλιό άρθρο του Intelligent Enterprise Magazine, &lt;a target="_blank" title="http://www.intelligententerprise.com/001020/celko.shtml" href="http://www.intelligententerprise.com/001020/celko.shtml"&gt;http://www.intelligententerprise.com/001020/celko.shtml&lt;/a&gt;, πολύ καλύτερα από ότι θα μπορούσα εδώ. Φέτος μάλιστα έβγαλε και ένα βιβλίο ειδικά για ιεραρχίες, το Trees and Hierarchies in SQL for Smarties. &lt;br /&gt;&lt;br /&gt;Τώρα, τα recursive queries ίσως να κάνουν την ιστορία πιό εύκολη. Θέλει μελέτη το ζήτημα, αλλά η δουλειά μπορεί να γίνει και τώρα χωρίς να καταφύγει κανείς σε αυτά.&lt;br /&gt;&lt;br /&gt;Τη λύση του Celko τη χρησιμοποίησα παλιότερα για να κάνω joins κάποιο πίνακα με ιεραρχικό πίνακα permissions που περιείχε ... εκατομμύρια εγγραφές! Σε καμμία περίπτωση δεν θα πετύχαινα αυτή την ταχύτητα με Oracle ή recursive queries.</description></item><item><title>Recursive queries</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/229.aspx</link><pubDate>Wed, 06 Oct 2004 07:42:04 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:229</guid><dc:creator>isidoros</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/229.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=229</wfw:commentRss><description>Έχει δει κανένας τα Recursive queries στον SQL 2005 (beta). Είναι αντίστοιχα με της Oracle ?&lt;br /&gt;&lt;br /&gt; Το &amp;#171;λογικό&amp;#187; πρόβλημα που έχω είναι το εξής.&lt;br /&gt;&lt;br /&gt;Ας υποθέσουμε σε μια εμπορική εφαρμογή οι κατηγορίες των ειδών έχουν δενδροειδή μορφή και είναι κάπως έτσι :&lt;br /&gt;&lt;br /&gt;•	SW&lt;br /&gt;         o	OS&lt;br /&gt;                   ?	Microsoft&lt;br /&gt;                   ?	Linux&lt;br /&gt;                   ?	DOS&lt;br /&gt;                   ?	Other&lt;br /&gt;        o	OFFICE&lt;br /&gt;        o	TOOLS&lt;br /&gt;•	Η/W&lt;br /&gt;        o	SERVERS&lt;br /&gt;        o	PCs&lt;br /&gt;                  ?	IBM&lt;br /&gt;                  ?	DELL&lt;br /&gt;        o	NOTEBOOKS&lt;br /&gt;                  ?	HP&lt;br /&gt;                  ?	Compaq&lt;br /&gt;                  ?	IBM&lt;br /&gt;&lt;br /&gt;Ο πίνακας που περιέχει τα data αυτά είναι ο εξής :&lt;br /&gt;&lt;br /&gt;ID	Name	         Parent ID&lt;br /&gt;1	SW	               0&lt;br /&gt;2	OS	               1&lt;br /&gt;3	Microsoft	       2&lt;br /&gt;4	Linux	                2&lt;br /&gt;5	DOS	                2&lt;br /&gt;6	Other	                2&lt;br /&gt;7	Office	                1&lt;br /&gt;8	Tools	                1&lt;br /&gt;9	HW	                0&lt;br /&gt;10	Servers	        9&lt;br /&gt;11	PCs	                9&lt;br /&gt;12	IBM	               11&lt;br /&gt;13	DELL	               11&lt;br /&gt;14	NOTEBOOKS 	9&lt;br /&gt;15	HP	               14&lt;br /&gt;16	Compaq	       14&lt;br /&gt;17	IBM	               14&lt;br /&gt;&lt;br /&gt;Αν γίνει μία πώληση σε ένα είδος που ανήκει στην κατηγορία Microsoft (ID=3) τότε αυτή η πώληση θα πρέπει να μετρήσει σε όλες τις από πάνω της (OS και SW)&lt;br /&gt;&lt;br /&gt;(σ.σ. τα επίπεδα δεν είναι standard. Αλλού μπορεί να είναι 2 επίπεδα βάθος αλλού 6 κλπ όπως επίσης δεν είναι απαραίτητο τα είδη να ανήκουν μόνο στην τελευταία κατηγορία του κάθε δέντρου)&lt;br /&gt;&lt;br /&gt;Με function μέσα από τον SQL δεν τα κατάφερα διότι δεν μπορούσα να καλέσω μία την ίδια function μέσα από τον εαυτό της ώστε να δημιουργήσω έναν βρόγχο και να φτάσω από την τελευταία κατηγορία στην πρώτη &lt;br /&gt;&lt;br /&gt;Ο τρόπος με τον οποίο έλυσα το πρόβλημα αλλα &amp;#171;δεν μου αρέσει&amp;#187; είναι ο εξής&lt;br /&gt;Υπάρχει ένας άλλος πίνακας που κρατάει όλη την δομή του δέντρου.&lt;br /&gt;&lt;br /&gt;Δηλαδή &lt;br /&gt;για την κατηγορία Microsoft έχει δύο εγγραφές&lt;br /&gt;&lt;br /&gt;ID	                 Parent ID	&lt;br /&gt;3 (Microsoft)	2	(OS)&lt;br /&gt;3 (Microsoft)	1	(SW)&lt;br /&gt;&lt;br /&gt;για την κατηγορία linux έχει άλλες δύο εγγραφές&lt;br /&gt;&lt;br /&gt;ID	                Parent ID	&lt;br /&gt;4 (Linux)	        2	(OS)&lt;br /&gt;4 (Linux)		1	(SW)&lt;br /&gt;&lt;br /&gt;Οπότε με τα αντίστοιχα joins επιτυγχάνεται ο σκοπός.&lt;br /&gt;&lt;br /&gt;Έχει ιδέα κανείς με τα Recursive queries αν αυτό επιτυγχάνεται ?&lt;br /&gt;</description></item></channel></rss>