SQL update select statement












0














I'm trying to update an entry in my database (postgresql). I'm having a problem with updating the query:



INSERT INTO prices (price, product_id)
SELECT
product_price, commn_id
FROM products_temp as prod
WHERE NOT EXISTS
(SELECT *
FROM prices od
WHERE prod.commn_id = od.product_id)
OR prod.product_price !=
( SELECT price
FROM prices as p
WHERE p.product_id = prod.commn_id
order by p.end
desc LIMIT 1 )


Query works fine when i delete:



OR prod.product_price != 
( SELECT price
FROM prices as p
WHERE p.product_id = prod.commn_id
order by p.end
desc LIMIT 1 )


So it seems to me that it's looping through this operation. My question is, how can I fix it?










share|improve this question




















  • 3




    What does work fine mean What is happening when it is not "working fine"?
    – Gordon Linoff
    Nov 19 '18 at 16:27










  • I mean that query insert new prices. When it's not working, the query is looping itself and nothing happens except infinite execution.
    – Michal
    Nov 19 '18 at 16:58










  • INSERT's should not have infinite execution unless the subquery selects a massive amounts of records or is run on a large table without indexes then it can take some time indeed to execute.
    – Raymond Nijland
    Nov 19 '18 at 17:10












  • NOT EXISTS (SELECT * FROM prices od WHERE prod.commn_id = od.product_id) is a bit wierd.. NOT EXIST are SQL boolean "short circuiting" keywords better is to give it boolean valus like 1 or 0 so your better off using (SELECT 1 FROM prices od WHERE prod.commn_id = od.product_id) instead..
    – Raymond Nijland
    Nov 19 '18 at 17:13












  • Side note: You're almost certainly going to be better off doing this as an UPSERT, which is almost certainly going to be cleaner/faster. My guess is that your actual problem is the additional, optional, condition is causing the system to throw unique-constraint violations (on prod.commn_id), but you haven't provided enough details to be sure.
    – Clockwork-Muse
    Nov 19 '18 at 18:38
















0














I'm trying to update an entry in my database (postgresql). I'm having a problem with updating the query:



INSERT INTO prices (price, product_id)
SELECT
product_price, commn_id
FROM products_temp as prod
WHERE NOT EXISTS
(SELECT *
FROM prices od
WHERE prod.commn_id = od.product_id)
OR prod.product_price !=
( SELECT price
FROM prices as p
WHERE p.product_id = prod.commn_id
order by p.end
desc LIMIT 1 )


Query works fine when i delete:



OR prod.product_price != 
( SELECT price
FROM prices as p
WHERE p.product_id = prod.commn_id
order by p.end
desc LIMIT 1 )


So it seems to me that it's looping through this operation. My question is, how can I fix it?










share|improve this question




















  • 3




    What does work fine mean What is happening when it is not "working fine"?
    – Gordon Linoff
    Nov 19 '18 at 16:27










  • I mean that query insert new prices. When it's not working, the query is looping itself and nothing happens except infinite execution.
    – Michal
    Nov 19 '18 at 16:58










  • INSERT's should not have infinite execution unless the subquery selects a massive amounts of records or is run on a large table without indexes then it can take some time indeed to execute.
    – Raymond Nijland
    Nov 19 '18 at 17:10












  • NOT EXISTS (SELECT * FROM prices od WHERE prod.commn_id = od.product_id) is a bit wierd.. NOT EXIST are SQL boolean "short circuiting" keywords better is to give it boolean valus like 1 or 0 so your better off using (SELECT 1 FROM prices od WHERE prod.commn_id = od.product_id) instead..
    – Raymond Nijland
    Nov 19 '18 at 17:13












  • Side note: You're almost certainly going to be better off doing this as an UPSERT, which is almost certainly going to be cleaner/faster. My guess is that your actual problem is the additional, optional, condition is causing the system to throw unique-constraint violations (on prod.commn_id), but you haven't provided enough details to be sure.
    – Clockwork-Muse
    Nov 19 '18 at 18:38














0












0








0







I'm trying to update an entry in my database (postgresql). I'm having a problem with updating the query:



INSERT INTO prices (price, product_id)
SELECT
product_price, commn_id
FROM products_temp as prod
WHERE NOT EXISTS
(SELECT *
FROM prices od
WHERE prod.commn_id = od.product_id)
OR prod.product_price !=
( SELECT price
FROM prices as p
WHERE p.product_id = prod.commn_id
order by p.end
desc LIMIT 1 )


Query works fine when i delete:



OR prod.product_price != 
( SELECT price
FROM prices as p
WHERE p.product_id = prod.commn_id
order by p.end
desc LIMIT 1 )


So it seems to me that it's looping through this operation. My question is, how can I fix it?










share|improve this question















I'm trying to update an entry in my database (postgresql). I'm having a problem with updating the query:



INSERT INTO prices (price, product_id)
SELECT
product_price, commn_id
FROM products_temp as prod
WHERE NOT EXISTS
(SELECT *
FROM prices od
WHERE prod.commn_id = od.product_id)
OR prod.product_price !=
( SELECT price
FROM prices as p
WHERE p.product_id = prod.commn_id
order by p.end
desc LIMIT 1 )


Query works fine when i delete:



OR prod.product_price != 
( SELECT price
FROM prices as p
WHERE p.product_id = prod.commn_id
order by p.end
desc LIMIT 1 )


So it seems to me that it's looping through this operation. My question is, how can I fix it?







sql postgresql






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Dec 10 '18 at 3:04









Cœur

17.4k9103145




17.4k9103145










asked Nov 19 '18 at 16:27









Michal

111




111








  • 3




    What does work fine mean What is happening when it is not "working fine"?
    – Gordon Linoff
    Nov 19 '18 at 16:27










  • I mean that query insert new prices. When it's not working, the query is looping itself and nothing happens except infinite execution.
    – Michal
    Nov 19 '18 at 16:58










  • INSERT's should not have infinite execution unless the subquery selects a massive amounts of records or is run on a large table without indexes then it can take some time indeed to execute.
    – Raymond Nijland
    Nov 19 '18 at 17:10












  • NOT EXISTS (SELECT * FROM prices od WHERE prod.commn_id = od.product_id) is a bit wierd.. NOT EXIST are SQL boolean "short circuiting" keywords better is to give it boolean valus like 1 or 0 so your better off using (SELECT 1 FROM prices od WHERE prod.commn_id = od.product_id) instead..
    – Raymond Nijland
    Nov 19 '18 at 17:13












  • Side note: You're almost certainly going to be better off doing this as an UPSERT, which is almost certainly going to be cleaner/faster. My guess is that your actual problem is the additional, optional, condition is causing the system to throw unique-constraint violations (on prod.commn_id), but you haven't provided enough details to be sure.
    – Clockwork-Muse
    Nov 19 '18 at 18:38














  • 3




    What does work fine mean What is happening when it is not "working fine"?
    – Gordon Linoff
    Nov 19 '18 at 16:27










  • I mean that query insert new prices. When it's not working, the query is looping itself and nothing happens except infinite execution.
    – Michal
    Nov 19 '18 at 16:58










  • INSERT's should not have infinite execution unless the subquery selects a massive amounts of records or is run on a large table without indexes then it can take some time indeed to execute.
    – Raymond Nijland
    Nov 19 '18 at 17:10












  • NOT EXISTS (SELECT * FROM prices od WHERE prod.commn_id = od.product_id) is a bit wierd.. NOT EXIST are SQL boolean "short circuiting" keywords better is to give it boolean valus like 1 or 0 so your better off using (SELECT 1 FROM prices od WHERE prod.commn_id = od.product_id) instead..
    – Raymond Nijland
    Nov 19 '18 at 17:13












  • Side note: You're almost certainly going to be better off doing this as an UPSERT, which is almost certainly going to be cleaner/faster. My guess is that your actual problem is the additional, optional, condition is causing the system to throw unique-constraint violations (on prod.commn_id), but you haven't provided enough details to be sure.
    – Clockwork-Muse
    Nov 19 '18 at 18:38








3




3




What does work fine mean What is happening when it is not "working fine"?
– Gordon Linoff
Nov 19 '18 at 16:27




What does work fine mean What is happening when it is not "working fine"?
– Gordon Linoff
Nov 19 '18 at 16:27












I mean that query insert new prices. When it's not working, the query is looping itself and nothing happens except infinite execution.
– Michal
Nov 19 '18 at 16:58




I mean that query insert new prices. When it's not working, the query is looping itself and nothing happens except infinite execution.
– Michal
Nov 19 '18 at 16:58












INSERT's should not have infinite execution unless the subquery selects a massive amounts of records or is run on a large table without indexes then it can take some time indeed to execute.
– Raymond Nijland
Nov 19 '18 at 17:10






INSERT's should not have infinite execution unless the subquery selects a massive amounts of records or is run on a large table without indexes then it can take some time indeed to execute.
– Raymond Nijland
Nov 19 '18 at 17:10














NOT EXISTS (SELECT * FROM prices od WHERE prod.commn_id = od.product_id) is a bit wierd.. NOT EXIST are SQL boolean "short circuiting" keywords better is to give it boolean valus like 1 or 0 so your better off using (SELECT 1 FROM prices od WHERE prod.commn_id = od.product_id) instead..
– Raymond Nijland
Nov 19 '18 at 17:13






NOT EXISTS (SELECT * FROM prices od WHERE prod.commn_id = od.product_id) is a bit wierd.. NOT EXIST are SQL boolean "short circuiting" keywords better is to give it boolean valus like 1 or 0 so your better off using (SELECT 1 FROM prices od WHERE prod.commn_id = od.product_id) instead..
– Raymond Nijland
Nov 19 '18 at 17:13














Side note: You're almost certainly going to be better off doing this as an UPSERT, which is almost certainly going to be cleaner/faster. My guess is that your actual problem is the additional, optional, condition is causing the system to throw unique-constraint violations (on prod.commn_id), but you haven't provided enough details to be sure.
– Clockwork-Muse
Nov 19 '18 at 18:38




Side note: You're almost certainly going to be better off doing this as an UPSERT, which is almost certainly going to be cleaner/faster. My guess is that your actual problem is the additional, optional, condition is causing the system to throw unique-constraint violations (on prod.commn_id), but you haven't provided enough details to be sure.
– Clockwork-Muse
Nov 19 '18 at 18:38












1 Answer
1






active

oldest

votes


















0














I think your whole problem comes from the operator in prod.product_price !=

I tried this and it worked for me :



INSERT INTO prices (price, product_id)
SELECT
product_price, commn_id
FROM products_temp as prod
WHERE NOT EXISTS
(SELECT *
FROM prices od
WHERE prod.commn_id = od.product_id)
OR prod.product_price not in
( SELECT price
FROM prices as p
WHERE p.product_id = prod.commn_id
order by p.end
desc LIMIT 1 )


Hope it will help you !






share|improve this answer





















    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53378905%2fsql-update-select-statement%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    I think your whole problem comes from the operator in prod.product_price !=

    I tried this and it worked for me :



    INSERT INTO prices (price, product_id)
    SELECT
    product_price, commn_id
    FROM products_temp as prod
    WHERE NOT EXISTS
    (SELECT *
    FROM prices od
    WHERE prod.commn_id = od.product_id)
    OR prod.product_price not in
    ( SELECT price
    FROM prices as p
    WHERE p.product_id = prod.commn_id
    order by p.end
    desc LIMIT 1 )


    Hope it will help you !






    share|improve this answer


























      0














      I think your whole problem comes from the operator in prod.product_price !=

      I tried this and it worked for me :



      INSERT INTO prices (price, product_id)
      SELECT
      product_price, commn_id
      FROM products_temp as prod
      WHERE NOT EXISTS
      (SELECT *
      FROM prices od
      WHERE prod.commn_id = od.product_id)
      OR prod.product_price not in
      ( SELECT price
      FROM prices as p
      WHERE p.product_id = prod.commn_id
      order by p.end
      desc LIMIT 1 )


      Hope it will help you !






      share|improve this answer
























        0












        0








        0






        I think your whole problem comes from the operator in prod.product_price !=

        I tried this and it worked for me :



        INSERT INTO prices (price, product_id)
        SELECT
        product_price, commn_id
        FROM products_temp as prod
        WHERE NOT EXISTS
        (SELECT *
        FROM prices od
        WHERE prod.commn_id = od.product_id)
        OR prod.product_price not in
        ( SELECT price
        FROM prices as p
        WHERE p.product_id = prod.commn_id
        order by p.end
        desc LIMIT 1 )


        Hope it will help you !






        share|improve this answer












        I think your whole problem comes from the operator in prod.product_price !=

        I tried this and it worked for me :



        INSERT INTO prices (price, product_id)
        SELECT
        product_price, commn_id
        FROM products_temp as prod
        WHERE NOT EXISTS
        (SELECT *
        FROM prices od
        WHERE prod.commn_id = od.product_id)
        OR prod.product_price not in
        ( SELECT price
        FROM prices as p
        WHERE p.product_id = prod.commn_id
        order by p.end
        desc LIMIT 1 )


        Hope it will help you !







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 19 '18 at 18:22









        SofienM

        916




        916






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53378905%2fsql-update-select-statement%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Can a sorcerer learn a 5th-level spell early by creating spell slots using the Font of Magic feature?

            Does disintegrating a polymorphed enemy still kill it after the 2018 errata?

            A Topological Invariant for $pi_3(U(n))$