यदि समवर्ती लेखन पहुंच हो सकती है शामिल तालिकाओं के लिए, निम्नलिखित प्रश्नों में दौड़ की स्थिति है। विचार करें:
आपका उदाहरण कर सकते हैं एक सीटीई (सामान्य तालिका अभिव्यक्ति) का उपयोग करें, लेकिन यह आपको कुछ भी नहीं देगा जो एक सबक्वायरी नहीं कर सका:
WITH x AS (
SELECT psp_id
FROM global.prospect
WHERE status IN ('new', 'reset')
ORDER BY request_ts
LIMIT 1
)
UPDATE global.prospect psp
SET status = status || '*'
FROM x
WHERE psp.psp_id = x.psp_id
RETURNING psp.*;
लौटाई गई पंक्ति अपडेट की गई . होगी संस्करण।
यदि आप लौटाई गई पंक्ति को किसी अन्य तालिका में सम्मिलित करना चाहते हैं, वह वह जगह है जहां WITH
क्लॉज जरूरी हो जाता है:
WITH x AS (
SELECT psp_id
FROM global.prospect
WHERE status IN ('new', 'reset')
ORDER BY request_ts
LIMIT 1
)
, y AS (
UPDATE global.prospect psp
SET status = status || '*'
FROM x
WHERE psp.psp_id = x.psp_id
RETURNING psp.*
)
INSERT INTO z
SELECT *
FROM y;
CTE का उपयोग करके डेटा-संशोधित क्वेरी को PostgreSQL 9.1 के साथ जोड़ा गया था।
The मैनुअल के बारे में WITH
प्रश्न (सीटीई) ।