SQL update select statement
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
add a comment |
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
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 anUPSERT
, 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 (onprod.commn_id
), but you haven't provided enough details to be sure.
– Clockwork-Muse
Nov 19 '18 at 18:38
add a comment |
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
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
sql postgresql
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 anUPSERT
, 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 (onprod.commn_id
), but you haven't provided enough details to be sure.
– Clockwork-Muse
Nov 19 '18 at 18:38
add a comment |
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 anUPSERT
, 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 (onprod.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
add a comment |
1 Answer
1
active
oldest
votes
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 !
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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 !
add a comment |
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 !
add a comment |
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 !
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 !
answered Nov 19 '18 at 18:22
SofienM
916
916
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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 (onprod.commn_id
), but you haven't provided enough details to be sure.– Clockwork-Muse
Nov 19 '18 at 18:38