I'm not convinced. POWERMULTISET provides me with an output of all outcomes from a set, what I want is different: I provide A B C as my input, but B has likeness options of J, K and L and C has likeness of X and Y.
In this scenario, if I just want the possible combinations (and order is not a problem) I'm not looking at a multiset issue as far as I can see? I'd need to swap out B for J first, then K and L. Then B & C for J and X, then J and Y and so on. The multiset option allows me to specify a set and return the results in all permutations only. *Results* A B C A J C A K C A L C A J X A J Y A K X A K Y A L X A L Y So, procedurally, I will code the above and return it pipelined. I was just hoping something like multiset would be available but in this situation it does not look possible. Thank you all for the time to suggest options. Regards Phil On 1 October 2013 17:48, ddf <orat...@msn.com> wrote: > > On Monday, September 30, 2013 2:58:07 PM UTC-6, Phil W wrote: >> >> Michael, >> >> Sorry, I mean split into phrases with the cross join just operating at >> the 'like word' level as follows >> >> car was red and next to a crimson motor >> motor was red and next to a crimson motor >> vehicle was red and next to a crimson motor >> car was rouge and next to a crimson motor >> car *was* crimson *and next to a* crimson motor >> ... and so on... >> >> Do you think this would be possible so that the output could effectively >> cross join x times on the underlined (or any defined equivalent word) to >> provide all equivalent phrases? >> >> I think it is quite a challenge to do this elegantly! >> >> Regards >> >> Phil >> >> >> >> >> On Monday, 30 September 2013 21:37:27 UTC+1, Michael Moore wrote: >>> >>> Phil, >>> you can do it with SQL, but it gets kind of ugly. >>> >>> SELECT EXTRACTVALUE (VALUE (d), '/g') AS rslt >>> FROM TABLE >>> (XMLSEQUENCE >>> (EXTRACT >>> (XMLTYPE.createxml ( '<row><g>' >>> || REPLACE >>> ('car was red and next >>> to a crimson motor', >>> ' ', >>> '</g><g>' >>> ) >>> || '</g></row>' >>> ), >>> '/row/g' >>> ) >>> ) >>> ) d; >>> >>> >>> RSLT >>> >>> ------------------------------**------------------------------** >>> -------------------- >>> car >>> >>> was >>> >>> red >>> >>> and >>> >>> next >>> >>> to >>> >>> a >>> >>> crimson >>> >>> motor >>> >>> >>> 9 rows selected. >>> If this is something going into a production environment, I would use >>> PL/SQL, simply for debugging reasons. >>> Mike >>> >>> >>> >>> On Mon, Sep 30, 2013 at 1:19 PM, Phil W <philwi...@gmail.com> wrote: >>> >>>> David, >>>> >>>> This is spot on and where I'd almost arrived at but what I'm ideally >>>> looking for is to return a set of results from an input string of several >>>> words. Unfortunately, I won't know if there are 2, 3 or 8 words and some >>>> will not have a likeness to worry about. >>>> >>>> For example: 'car was red and next to a crimson motor' >>>> >>>> I'm really wondering if SQL alone can do this and will probably have to >>>> try and write a function. The function will have to dynamically split the >>>> phrase up into sections to cater for the like words and then cross join the >>>> whole thing together. >>>> >>>> Thanks v much for your help so far! >>>> >>>> Phil >>>> >>>> >>>> On Monday, 30 September 2013 16:19:37 UTC+1, ddf wrote: >>>>> >>>>> >>>>> On Sunday, September 29, 2013 12:19:11 PM UTC-6, Michael Moore wrote: >>>>>> >>>>>> SQL> DROP TABLE syn >>>>>> Table dropped. >>>>>> SQL> CREATE TABLE syn >>>>>> ( >>>>>> val VARCHAR2 (30), >>>>>> lik VARCHAR2 (30) >>>>>> ) >>>>>> Table created. >>>>>> SQL> INSERT ALL >>>>>> INTO syn >>>>>> VALUES ('red', 'red') >>>>>> INTO syn >>>>>> VALUES ('red', 'rouge') >>>>>> INTO syn >>>>>> VALUES ('red', 'crimson') >>>>>> INTO syn >>>>>> VALUES ('car', 'car') >>>>>> INTO syn >>>>>> VALUES ('car', 'motor') >>>>>> INTO syn >>>>>> VALUES ('car', 'vehicle') >>>>>> SELECT 1 FROM DUAL >>>>>> 6 rows created. >>>>>> SQL> COMMIT >>>>>> Commit complete. >>>>>> SQL> SELECT x.lik, y.lik >>>>>> FROM syn x CROSS JOIN syn y >>>>>> WHERE x.val = 'red' AND y.val = 'car' >>>>>> >>>>>> LIK LIK_1 >>>>>> ------------------------------ ------------------------------ >>>>>> red car >>>>>> red motor >>>>>> red vehicle >>>>>> rouge car >>>>>> rouge motor >>>>>> rouge vehicle >>>>>> crimson car >>>>>> crimson motor >>>>>> crimson vehicle >>>>>> >>>>>> 9 rows selected. >>>>>> >>>>>> >>>>>> On Sun, Sep 29, 2013 at 3:51 AM, Phil W <philwi...@gmail.com> wrote: >>>>>> >>>>>>> Given a phase, and a table of "like" words, essentially a thesaurus, >>>>>>> I'd like to generate all permutations of the phrase >>>>>>> making use of the thesaurus entries. >>>>>>> >>>>>>> I am sure it is possible in an SQL statement as I'd like to avoid >>>>>>> PL/SQL if possible but I am thinking now that a function/pipelined >>>>>>> function might be my only option. Does anyone with better SQL than me >>>>>>> know >>>>>>> how this can be done please? >>>>>>> >>>>>>> create table word_syn >>>>>>> (value varchar2(30), >>>>>>> likeness varchar2(30)) >>>>>>> / >>>>>>> >>>>>>> insert all >>>>>>> into word_syn values ('red','rouge') >>>>>>> into word_syn values ('red','crimson') >>>>>>> into word_syn values ('car','motor') >>>>>>> into word_syn values ('car','vehicle') >>>>>>> select 1 from dual >>>>>>> / >>>>>>> >>>>>>> >>>>>>> /* Find options for "big red car" >>>>>>> Desired output is: >>>>>>> big rouge car >>>>>>> big rouge motor >>>>>>> big rouge vehicle >>>>>>> big red motor >>>>>>> big crimson motor... and so on. >>>>>>> */ >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "Oracle PL/SQL" group. >>>>>>> To post to this group, send email to oracle...@googlegroups.com >>>>>>> To unsubscribe from this group, send email to >>>>>>> Oracle-PLSQL...@googlegroups.**c**om >>>>>>> For more options, visit this group at >>>>>>> http://groups.google.com/**group**/Oracle-PLSQL?hl=en<http://groups.google.com/group/Oracle-PLSQL?hl=en> >>>>>>> >>>>>>> --- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "Oracle PL/SQL" group. >>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>> send an email to oracle-plsql...@googlegroups.**c**om. >>>>>>> For more options, visit >>>>>>> https://groups.google.com/**grou**ps/opt_out<https://groups.google.com/groups/opt_out> >>>>>>> . >>>>>>> >>>>>> >>>>>> >>>>> Taking this one step further: >>>>> >>>>> SQL> select z.likeness, alike, blike >>>>> 2 from (select a1.likeness alike, b1.likeness blike from word_syn >>>>> a1 cross join word_syn b1 >>>>> 3 where b1.value = 'car' and a1.value='red') cross join word_syn z >>>>> 4 where z.value = 'big' >>>>> 5 / >>>>> >>>>> LIKENESS ALIKE BLIKE >>>>> ------------------------------ ------------------------------ >>>>> ------------------------------ >>>>> big red car >>>>> huge red car >>>>> large red car >>>>> gigantic red car >>>>> grand red car >>>>> humongous red car >>>>> big red motor >>>>> huge red motor >>>>> large red motor >>>>> gigantic red motor >>>>> grand red motor >>>>> >>>>> LIKENESS ALIKE BLIKE >>>>> ------------------------------ ------------------------------ >>>>> ------------------------------ >>>>> humongous red motor >>>>> big red vehicle >>>>> huge red vehicle >>>>> large red vehicle >>>>> gigantic red vehicle >>>>> grand red vehicle >>>>> humongous red vehicle >>>>> big rouge car >>>>> huge rouge car >>>>> large rouge car >>>>> gigantic rouge car >>>>> >>>>> LIKENESS ALIKE BLIKE >>>>> ------------------------------ ------------------------------ >>>>> ------------------------------ >>>>> grand rouge car >>>>> humongous rouge car >>>>> big rouge motor >>>>> huge rouge motor >>>>> large rouge motor >>>>> gigantic rouge motor >>>>> grand rouge motor >>>>> humongous rouge motor >>>>> big rouge vehicle >>>>> huge rouge vehicle >>>>> large rouge vehicle >>>>> >>>>> LIKENESS ALIKE BLIKE >>>>> ------------------------------ ------------------------------ >>>>> ------------------------------ >>>>> gigantic rouge vehicle >>>>> grand rouge vehicle >>>>> humongous rouge vehicle >>>>> big crimson car >>>>> huge crimson car >>>>> large crimson car >>>>> gigantic crimson car >>>>> grand crimson car >>>>> humongous crimson car >>>>> big crimson motor >>>>> huge crimson motor >>>>> >>>>> LIKENESS ALIKE BLIKE >>>>> ------------------------------ ------------------------------ >>>>> ------------------------------ >>>>> large crimson motor >>>>> gigantic crimson motor >>>>> grand crimson motor >>>>> humongous crimson motor >>>>> big crimson vehicle >>>>> huge crimson vehicle >>>>> large crimson vehicle >>>>> gigantic crimson vehicle >>>>> grand crimson vehicle >>>>> humongous crimson vehicle >>>>> >>>>> 54 rows selected. >>>>> >>>>> SQL> >>>>> >>>>> >>>>> David Fitzjarrell >>>>> >>>> -- >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Oracle PL/SQL" group. >>>> To post to this group, send email to oracle...@googlegroups.com >>>> To unsubscribe from this group, send email to >>>> Oracle-PLSQL...@googlegroups.**com >>>> For more options, visit this group at >>>> http://groups.google.com/**group/Oracle-PLSQL?hl=en<http://groups.google.com/group/Oracle-PLSQL?hl=en> >>>> >>>> --- >>>> You received this message because you are subscribed to the Google >>>> Groups "Oracle PL/SQL" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to oracle-plsql...@googlegroups.**com. >>>> For more options, visit >>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out> >>>> . >>>> >>> >>> > It may be that you cannot do this elegantly (or as elegantly as you might > desire). I would take Michael's advice and pursue this using > powermultiset functionality. > > > David Fitzjarrell > > -- > -- > You received this message because you are subscribed to the Google > Groups "Oracle PL/SQL" group. > To post to this group, send email to Oracle-PLSQL@googlegroups.com > To unsubscribe from this group, send email to > oracle-plsql-unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/Oracle-PLSQL?hl=en > > --- > You received this message because you are subscribed to a topic in the > Google Groups "Oracle PL/SQL" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/oracle-plsql/KEd0BoKeonw/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > oracle-plsql+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. > -- -- You received this message because you are subscribed to the Google Groups "Oracle PL/SQL" group. To post to this group, send email to Oracle-PLSQL@googlegroups.com To unsubscribe from this group, send email to oracle-plsql-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/Oracle-PLSQL?hl=en --- You received this message because you are subscribed to the Google Groups "Oracle PL/SQL" group. To unsubscribe from this group and stop receiving emails from it, send an email to oracle-plsql+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.