কল্পনা করুন যে আপনার কাছে দুটি আলাদা সারণী / ক্যোয়ারী রয়েছে যাতে অভিন্ন ডেটা / রিটার্ন দেওয়ার কথা রয়েছে। আপনি এটি যাচাই করতে চান। প্রতিটি কলামের সাথে তুলনা করে নীচের উদাহরণের মতো প্রতিটি টেবিল থেকে কোনও তুলনামূলক সারি দেখানোর সহজ উপায় কী? ধরুন টেবিলগুলিতে 30 টি কলাম রয়েছে, যার মধ্যে অনেকগুলি শূন্য রয়েছে।
যখন কোনও পিকে নেই বা পি-পি প্রতি নকল থাকতে পারে, কেবল পিকে কলামগুলিতে যোগদান যথেষ্ট নয়, এবং 30 টি যুক্ত শর্তের সাথে একটি সম্পূর্ণ যোগদান করতে হবে এমন এক বিপর্যয় হবে যেটি সঠিকভাবে NULL পরিচালনা করে, সাথে সাথে একটি ন্যক্কারজনক অবস্থা ম্যাচ করা সারিগুলি বাদ দিতে।
সাধারণত যখন আমি আনস্ক্রब्ড বা সম্পূর্ণরূপে না বুঝে ডেটার বিরুদ্ধে একটি নতুন কোয়েরি লিখছি তখন সমস্যাটি সবচেয়ে খারাপ এবং কোনও পিকে যুক্তিসঙ্গতভাবে উপলব্ধ হওয়ার সম্ভাবনা অত্যন্ত কম। আমি সমস্যাটি সমাধান করার জন্য দুটি ভিন্ন উপায়ে রান্না করি এবং তার ফলাফলগুলির সাথে তুলনা করি, আমি অজানা ছিলাম এমন ডেটাগুলিতে বিশেষ ক্ষেত্রে হাইলাইট করা পার্থক্য।
ফলাফলটির মতো দেখতে প্রয়োজন:
Which Col1 Col2 Col3 ... Col30
------ ------ ------ ------ ------
TableA Cat 27 86 -- mismatch
TableB Cat 27 105 -- mismatch
TableB Cat 27 87 -- mismatch 2
TableA Cat 128 92 -- no corresponding row
TableB Lizard 83 NULL -- no corresponding row
যদি [Col1, Col2]
কোনও যৌগিক কী হয়ে থাকে এবং আমরা তাদের দ্বারা আমাদের চূড়ান্ত ফলাফলের জন্য আদেশ করি, তবে আমরা সহজেই দেখতে পারি যে A এবং B এর একটির সারি আলাদা এবং একইরকম হওয়া উচিত এবং প্রত্যেকটির একটির সারি অন্যটিতে নেই।
উপরের উদাহরণে, প্রথম সারিতে দু'বার দেখা বাঞ্ছনীয় নয়।
নমুনা সারণী এবং ডেটা সেট আপ করতে এখানে ডিডিএল এবং ডিএমএল রয়েছে:
CREATE TABLE dbo.TableA (
Col1 varchar(10),
Col2 int,
Col3 int,
Col4 varchar(10),
Col5 varchar(10),
Col6 varchar(10),
Col7 varchar(10),
Col8 varchar(10),
Col9 varchar(10),
Col10 varchar(10),
Col11 varchar(10),
Col12 varchar(10),
Col13 varchar(10),
Col14 varchar(10),
Col15 varchar(10),
Col16 varchar(10),
Col17 varchar(10),
Col18 varchar(10),
Col19 varchar(10),
Col20 varchar(10),
Col21 varchar(10),
Col22 varchar(10),
Col23 varchar(10),
Col24 varchar(10),
Col25 varchar(10),
Col26 varchar(10),
Col27 varchar(10),
Col28 varchar(10),
Col29 varchar(10),
Col30 varchar(10)
);
CREATE TABLE dbo.TableB (
Col1 varchar(10),
Col2 int,
Col3 int,
Col4 varchar(10),
Col5 varchar(10),
Col6 varchar(10),
Col7 varchar(10),
Col8 varchar(10),
Col9 varchar(10),
Col10 varchar(10),
Col11 varchar(10),
Col12 varchar(10),
Col13 varchar(10),
Col14 varchar(10),
Col15 varchar(10),
Col16 varchar(10),
Col17 varchar(10),
Col18 varchar(10),
Col19 varchar(10),
Col20 varchar(10),
Col21 varchar(10),
Col22 varchar(10),
Col23 varchar(10),
Col24 varchar(10),
Col25 varchar(10),
Col26 varchar(10),
Col27 varchar(10),
Col28 varchar(10),
Col29 varchar(10),
Col30 varchar(10)
);
INSERT dbo.TableA (Col1, Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9, Col10, Col11, Col12, Col13, Col14, Col15, Col16, Col17, Col18, Col19, Col20, Col21, Col22, Col23, Col24, Col25, Col26, Col27, Col28, Col29, Col30)
VALUES
('Cat', 27, 86, 'a', 'b', 'c', 'd', 'e', 'f', 'g',' h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0'),
('Cat', 128, 92, 'a', 'b', 'c', 'd', 'e', 'f', 'g',' h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0'),
('Porcupine', NULL, 42, 'a', 'b', 'c', 'd', 'e', 'f', 'g',' h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0'),
('Tapir', NULL, NULL, 'a', 'b', 'c', 'd', 'e', 'f', 'g',' h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0')
;
INSERT dbo.TableB (Col1, Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9, Col10, Col11, Col12, Col13, Col14, Col15, Col16, Col17, Col18, Col19, Col20, Col21, Col22, Col23, Col24, Col25, Col26, Col27, Col28, Col29, Col30)
VALUES
('Cat', 27, 105, 'a', 'b', 'c', 'd', 'e', 'f', 'g',' h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0'),
('Cat', 27, 87, 'a', 'b', 'c', 'd', 'e', 'f', 'g',' h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0'),
('Lizard', 83, NULL, 'a', 'b', 'c', 'd', 'e', 'f', 'g',' h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0'),
('Porcupine', NULL, 42, 'a', 'b', 'c', 'd', 'e', 'f', 'g',' h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0'),
('Tapir', NULL, NULL, 'a', 'b', 'c', 'd', 'e', 'f', 'g',' h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0');
SELECT ... EXCEPT ... SELECT
অন্যSELECT
বিবৃতি দিয়ে মোড়ানো এবং টেবিলের নাম যুক্ত করুন,SELECT "table1", T1.* FROM (SELECT ... EXCEPT ... SELECT) T1
তারপরেUNION
এটি প্রশ্নের অন্য অর্ধেকের সাথে যুক্ত করুন।