এসকিউএল-তে এমন কোনও নির্মাণ রয়েছে যা আমাকে নীচের মতো কিছু করার অনুমতি দেবে:
হ্যাঁ, আপনি যেমন লিখেছিলেন ঠিক তেমনই রয়েছে। শুধু করা col1, col2
প্রথম বন্ধনী ভিতরে:
-- works in PostgreSQL, Oracle, MySQL, DB2, HSQLDB
SELECT whatever
FROM t --- you missed the FROM
WHERE (col1, col2) --- parentheses here
IN ((val1a, val2a), (val1b, val2b), ...) ;
আপনি যদি এটি ডিবিএমএস-এ চেষ্টা করে থাকেন তবে দেখতে পাবেন এটি কার্যকর হয়নি। কারণ সমস্ত ডিবিএমএস (বিবর্তিত) এসকিউএল স্ট্যান্ডার্ডের সমস্ত বৈশিষ্ট্য বাস্তবায়ন করে না। এটি ওরাকল, মাইএসকিউএল, পোস্টগ্রিস, ডিবি 2 এবং এইচএসকিউএলডিবির সর্বশেষতম সংস্করণগুলিতে কাজ করে (এটি মাইএসকিউএলে ভালভাবে অনুকূলিত হয়নি এবং সূচকগুলি ব্যবহার করে না, সুতরাং তারা এটিকে 5.7 এ স্থির না করা হলে সেখানে এড়ানো উচিত)।
IN
অপারেটর সম্পর্কে মাইএসকিউএল ডকুমেন্টেশন এবং সারি নির্মাণকারী সম্পর্কে পোস্টগ্রিস ডকুমেন্টেশন দেখুন । প্রথম বন্ধনীতে দুটি * (বা আরও বেশি) মানকে একটি সারি- নির্মাতা বলা হয় ।
অন্যান্য ধারণা যা একই ধারণা প্রকাশ করে:
-- works in PostgreSQL, DB2
SELECT whatever
FROM t
WHERE (col1, col2)
IN ( VALUES (val1a, val2a), (val1b, val2b), ...) ;
SELECT t.whatever
FROM t
JOIN
( VALUES (val1a, val2a), (val1b, val2b), ...) AS x (col1, col2)
ON (x.col1, x.col2) = (t.col1, t.col2) ;
দুজনেই পোস্টগ্র্রেস এবং ডিবি 2 (আফাইক) এ কাজ করে। শেষটি এসকিউএল সার্ভারে কাজ করার জন্যও পরিবর্তন করা যেতে পারে:
-- works in PostgreSQL, DB2, SQL Server
SELECT t.whatever
FROM t
JOIN
( VALUES (val1a, val2a), (val1b, val2b), ...) AS x (col1, col2)
ON x.col1 = t.col1
AND x.col2 = t.col2 ;
মানগুলি প্রথমে (অস্থায়ী বা স্থায়ী) টেবিলের মধ্যে রেখে, সর্বত্র কাজ করার জন্য এটি পরিবর্তন করা যেতে পারে:
-- works everywhere
CREATE TABLE values_x
( col1 ...,
col2 ...) ;
-- use appropriate for the DBMS syntax here
INSERT INTO values_x (col1, col2)
VALUES (val1a, val2a), (val1b, val2b), ... ;
SELECT t.whatever
FROM t
JOIN values_x x
ON x.col1 = t.col1
AND x.col2 = t.col2 ;
DROP TABLE values_x ;
এবং সর্বদা দীর্ঘ পথ বা IN
দীর্ঘ অভিব্যক্তিতে রূপান্তরকরণ এর সাথে OR
সর্বত্র কাজ করা উচিত:
-- works in all SQL DBMS
SELECT whatever
FROM t
WHERE col1 = val1a AND col2 = val2a
OR col1 = val1b AND col2 = val2b
---
;
*: ROW(v)
পোস্টগ্র্রেস ডক্স সহ এটি কেবলমাত্র একটি মান হতে পারে ।
WHERE (x, y) IN (a,b)
? আমি মাইএসকিএল ব্যবহার করছি। সম্ভবত আমি জানি না এই নির্মাণটি কী বলা হয় is