কোন মানটি কোনও সারণি সারির সাথে মেলে না তা চিহ্নিত করা


10

আমি সহজেই পরীক্ষা করতে সক্ষম হতে চাই যে কোনও প্রশ্নের মধ্যে সরবরাহিতদের মধ্যে কোনও টেবিলটিতে কোন অনন্য পরিচয়দাতাকারীর অস্তিত্ব নেই।

আরও ভাল ব্যাখ্যা করার জন্য, তালিকার "1, 2, 3, 4" তালিকার কোন আইডি উপস্থিত নেই তা যাচাই করার জন্য আমি এখনই কী করব's

  1. SELECT * FROM dbo."TABLE" WHERE "ID" IN ('1','2','3','4'), ধরা যাক যে টেবিলটিতে আইডি 2 সহ কোনও সারি নেই।
  2. এক্সেল মধ্যে ফলাফল ডাম্প
  3. মূল তালিকায় একটি ভিএলুকআপ চালান যা ফলাফল তালিকার প্রতিটি তালিকার মান সন্ধান করে।
  4. যে কোনও ভিএলুকআপের ফলাফল #N/Aযা টেবিলে ঘটে না এমন একটি মানের উপর।

আমি ভাবছি এটি করার একটি আরও ভাল উপায় হতে পারে। আমি আদর্শ মত কিছু খুঁজছি

চেক করতে তালিকা -> চেক করতে টেবিলের প্রশ্নগুলি -> তালিকার সদস্যদের তালিকায় নেই


দয়া করে আমাদের এসকিউএল সার্ভারের সংস্করণটি অনুমান করবেন না?
অ্যারন বারট্র্যান্ড

ইন / অস্তিত্ব নেই? stackoverflow.com/questions/173041/not-in-vs-not-exists
এরিক

দুঃক্ষিত। [সম্পাদিত] এটি পুরানো। না-ইন করার সমস্যাটি হ'ল এটি টেবিলে থাকা সমস্ত কিছু ফিরিয়ে দেবে ...
এনআরিলিংহ ২

উত্তর:


14

ব্যবহার EXCEPT:

SELECT * FROM
  (values (1),(2),(3),(4)) as T(ID)
EXCEPT
SELECT ID 
FROM [TABLE];

এসকিএলফিডল দেখুন ।


valuesকনস্ট্রাক্টর কেবল এসকিউএল সার্ভার ২০০৮ বা তার পরে কাজ করবে। 2005 এর জন্য, ব্যবহার করুন

SELECT 'value'
UNION SELECT 'value'

এই এসও উত্তরে বিস্তারিত হিসাবে ।


ওফস, নির্দিষ্ট করা উচিত। আইডি যদি একটি বর্ণনাকার হয় তবে কী হবে?
এনআরিলিংহ 26:53

1
@ এনআরিলিংহ আপনার ডিবি পুনরায় নকশা করুন :) তবে এটি আমার মনে হয় একইভাবে কাজ করা উচিত
জেএনকে ২

Incorrect syntax near the keyword 'values'.দৌড়ানোর সময় আমি পেতে থাকিSELECT * FROM (values ('search string'),('other string')) as T(ID)
এনআরিলিংহ

আপনার সিনট্যাক্সটি এসকিউএল সার্ভার 2008r2 এ আমার পক্ষে ভাল কাজ করে - আমি আপনার মন্তব্যটি এতে আটকানোতে পেরেছিলাম।
জেএনকে ২

আমি 2005. খ্রিস্ট।
এনআরিলিংহ ২

6

আপনি যে আইডিগুলির সন্ধান করছেন সেগুলিতে আমি একটি টেবিল ভেরিয়েবল বা টেম্প টেবিল তৈরি করব ... তারপরে রিমাসের সমাধানটি ব্যবহার করুন, ২০০৮ সিনট্যাকটিক চিনির বিয়োগ:

declare @t table (ID int)
insert into @t values (1)
insert into @t values (2)
insert into @t values (3)
insert into @t values (4)
insert into @t values (5)

select ID from @t
except
select ID
from [Table];

3

আমি যখন এই প্রশ্নটি জিজ্ঞাসা করেছি তার চেয়ে এখন আমি কয়েক বছর বুদ্ধিমান (এবং একটি নতুন এসকিউএল সার্ভার রয়েছে), তাই আমি এই প্রশ্নটি করার জন্য পেয়েছি বিখ্যাত প্রশ্ন ব্যাজটি উদযাপন করার জন্য, এখন আমি কী করব তা এখানে। (আমি মনে করি না যে আমি EXCEPTকখন থেকে অপারেটরটি ব্যবহার করেছি ))

আমি বলব যে সিটিইর প্রয়োজন ছাড়াই আপনি অন্যান্য যোগদানের সাথে এটি রচনা করতে পারেন তার LEFT JOINচেয়ে নীচের পদ্ধতিটি আরও কার্যকর EXCEPT

SELECT v.val
  FROM (VALUES (1), (2), (3), (4), (5)) v (val)
    LEFT JOIN dbo.SomeTable t
      ON t.id = v.val
  WHERE t.id IS NULL;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.