Ask a Question related to MySQL, Design and Development.

  1. #1

    Default Avoiding subquery

    Hi,

    if anyone feels like a little quiz (but I don't know the answer), just for
    interest:

    Is it possible to rewrite this:

    SELECT domain,ftptraffic,(SELECT SUM(traffic) FROM monthlytraffic WHERE year
    = '2005' AND monthlytraffic.domain = totaltraffic.domain) AS correction FROM
    totaltraffic

    or even this:

    UPDATE totaltraffic SET ftptraffic = ftptraffic - (SELECT SUM(traffic) FROM
    monthlytraffic WHERE year = '2005' AND monthlytraffic.domain =
    totaltraffic.domain)

    without using subqueries?

    Since I use MySQL > 4.1 it works fine this way... I'm amazed. ;)

    Regards,
    André


    André Hänsel Guest

  2. Similar Questions and Discussions

    1. Subquery
      I am trying to update a table with data in a "look up table." Specifically, I have a table that contains zip codes but is missing both city &...
    2. using list in subquery
      I have a query that I would like to pass a list of values to use in the WHERE statement. How do I use a list in the WHERE statement? Example:...
    3. SQL subquery question
      I have a query running inside of Coldfusion webpage. query blah cfoutput query blah { query another_blah { cfoutput another_blah
    4. Select From SubQuery
      Yes you can create pseudo tables and reference them in the outer query as you have done. -- HTH, SriSamp Please reply to the whole group only! ...
    5. subquery with more than 1 fields
      select * from ordermaster where (orderid,customerid) in select orderid,customerid from orderdetail the sql can't be run in ms sql and is there...
  3. #2

    Default Re: Avoiding subquery

    "André Hänsel" <andre@webkr.de> wrote in message
    news:dt3672$7ou$1@sagnix.uni-muenster.de...
    > Is it possible to rewrite this:
    >
    > SELECT domain,ftptraffic,(SELECT SUM(traffic) FROM monthlytraffic WHERE
    > year
    > = '2005' AND monthlytraffic.domain = totaltraffic.domain) AS correction
    > FROM
    > totaltraffic
    Ok, I'll give it a shot. Note that I haven't tested this, so caveat emptor.
    :-)

    SELECT t.domain, t.ftptraffic, SUM(m.traffic) AS correction
    FROM totaltraffic AS t LEFT OUTER JOIN monthlytraffic AS m
    ON m.domain = t.domain AND m.year = '2005'

    By using the outer join, this delivers all the rows in totaltraffic, even if
    there was no traffic for a given domain during 2005. So it should give the
    same results as your query.
    > or even this:
    >
    > UPDATE totaltraffic SET ftptraffic = ftptraffic - (SELECT SUM(traffic)
    > FROM
    > monthlytraffic WHERE year = '2005' AND monthlytraffic.domain =
    > totaltraffic.domain)
    UPDATE totaltraffic AS t, monthlytraffic AS m
    SET t.ftptraffic = t.ftptraffic - m.traffic
    WHERE m.domain = t.domain AND m.year = '2005'

    You don't have to do the SUM this way. It does the subtraction for each
    domain/month combination. But the end result is the same. This uses the
    MySQL extended syntax for multi-table update, which is not standard SQL.

    Regards,
    Bill K.


    Bill Karwin Guest

  4. #3

    Default Re: Avoiding subquery

    Bill Karwin wrote:
    > "André Hänsel" <andre@webkr.de> wrote in message
    > news:dt3672$7ou$1@sagnix.uni-muenster.de...
    >> Is it possible to rewrite this:
    >>
    >> SELECT domain,ftptraffic,(SELECT SUM(traffic) FROM monthlytraffic
    >> WHERE year
    >> = '2005' AND monthlytraffic.domain = totaltraffic.domain) AS
    >> correction FROM
    >> totaltraffic
    >
    > Ok, I'll give it a shot. Note that I haven't tested this, so caveat
    > emptor. :-)
    >
    > SELECT t.domain, t.ftptraffic, SUM(m.traffic) AS correction
    > FROM totaltraffic AS t LEFT OUTER JOIN monthlytraffic AS m
    > ON m.domain = t.domain AND m.year = '2005'
    >
    > By using the outer join, this delivers all the rows in totaltraffic,
    > even if there was no traffic for a given domain during 2005. So it
    > should give the same results as your query.
    I didn't yet try to understand your variant, but it gives me the "Mixing of
    group comlumns with non group columns is illegal withour GROUP BY"-error.


    André Hänsel Guest

  5. #4

    Default Re: Avoiding subquery

    "André Hänsel" <andre@webkr.de> wrote in message
    news:dt3bg5$8qk$1@sagnix.uni-muenster.de...
    >> SELECT t.domain, t.ftptraffic, SUM(m.traffic) AS correction
    >> FROM totaltraffic AS t LEFT OUTER JOIN monthlytraffic AS m
    >> ON m.domain = t.domain AND m.year = '2005'
    >>
    > I didn't yet try to understand your variant, but it gives me the "Mixing
    > of
    > group comlumns with non group columns is illegal withour GROUP BY"-error.
    Woops!

    SELECT t.domain, t.ftptraffic, SUM(m.traffic) AS correction
    FROM totaltraffic AS t LEFT OUTER JOIN monthlytraffic AS m
    ON m.domain = t.domain AND m.year = '2005'
    GROUP BY t.domain

    I tried this (though with no data) and at least it doesn't give the error
    about mixing of group columns.

    Regards,
    Bill K.


    Bill Karwin Guest

Posting Permissions

  • You may not post new threads
  • You may post replies
  • You may not post attachments
  • You may not edit your posts

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139