সারণি সারিগুলি থেকে মুছুন যেখানে কোনও কলাম ক্ষেত্র শূন্য রয়েছে


11

টেবিল থেকে কোনও সারি মুছে ফেলার কোনও উপায় আছে যেখানে কোনও কলাম ক্ষেত্রটি স্পষ্টভাবে উল্লেখ না করে কোন কলামটি বাতিল?

আমি পোস্টগ্রিজ এসকিউএল ব্যবহার করছি।

এখানে আমার সম্পর্কের স্কিমা:

  Column    |  Type   |                              Modifiers                               
  --------------+---------+----------------------------------------------------------------------
  id           | integer | not null default  nextval('aurostat.visitor_center_id_seq'::regclass)
  date         | date    | 
  persons      | integer | 
  two_wheelers | integer | 
  cars         | integer | 
  vans         | integer | 
  buses        | integer | 
  autos        | integer | 

ধন্যবাদ

উত্তর:


18

আমি এটি করার দুটি উপায় দেখতে পাচ্ছি:

সাধারণ স্ট্যান্ডার্ড এসকিউএল সহ, সমস্ত কলামগুলিকে কেবল তালিকাবদ্ধ করুন এবং এটি একটি বা এর সাথে একত্রিত করুন:

delete from the_table
where date is null
   or persons is null
   or two_wheelers is null
   or cars is null
   or vans is null
   or buses is null
   or autos is null;

আরেকটি (পোস্টগ্রিস নির্দিষ্ট) সমাধান হ'ল সম্পূর্ণ সারির সাথে তুলনা NOT NULL

select *
from the_table
where the_table is not null;

যেখানে সমস্ত কলামগুলি নাল নয় কেবল কেবল সারিগুলিতে ফিরে আসবে । আপনি বিপরীতটি চান, সুতরাং আপনাকে এড়াতে হবে যে where not (the_table is not null)শর্তটি where the_table is nullকিছু আলাদা that যা কেবলমাত্র সারিগুলির সাথে মেলে যেখানে সমস্ত কলাম শূন্য রয়েছে।

delete from the_table
where not (the_table is not null);

ধন্যবাদ! আমি মনে করি যে দ্বিতীয় সমাধানটি আমি যে সমাধানটি সন্ধান করছি।
ধালিমন

3
এটি বুদ্ধিমান
জ্যাক বলছেন topanswers.xyz

আমি সত্যিই পরিষ্কার এবং সংক্ষিপ্ত where not (the_table is not null);পদ্ধতির পছন্দ করি। আমি সাধারণ এসকিউএল সম্পর্কে যা ভাবতে পারি তা হ'ল সেরা NATURAL JOIN
lad2025

0

আপনি যদি প্রতিটি কলামটি নির্দিষ্ট করতে চান তবে আপনি ব্যবহার করতে পারেন NOT EXISTS ... NATURAL JOIN

সতর্কবাণী! পারফরম্যান্স দৃষ্টিকোণ থেকে এই সমাধানটি সেরা নয়। এটি ওরাকল / পোস্টগ্র্রেএসকিউএল / এসকিউএলাইট / মারিয়াডিবি 10.3.2 এবং তারপরে কাজ করা উচিত।

ঠিককরা:

CREATE TABLE the_table(
   id           integer not null 
  ,date_          date    
  ,persons       integer 
  ,two_wheelers  integer 
  ,cars          integer 
  ,vans          integer 
  ,buses         integer 
 , autos         integer 
);

INSERT INTO the_table(id, date_, persons, two_wheelers, cars, vans, buses, autos)
VALUES (1, '21/JAN/2018',1,1,1,1,1,1);

INSERT INTO the_table(id, date_, persons, two_wheelers, cars, vans, buses, autos)
VALUES (2, '21/JAN/2018',2,2,2,2,NULL,2);
INSERT INTO the_table(id, date_, persons, two_wheelers, cars, vans, buses, autos)
VALUES (3, '21/JAN/2018',3,3,3,3,NULL,NULL);

SELECT * FROM the_table;

+----+-------------+---------+--------------+------+------+-------+-------+
| id |    date_    | persons | two_wheelers | cars | vans | buses | autos |
+----+-------------+---------+--------------+------+------+-------+-------+
|  1 | 21/JAN/2018 |       1 |            1 |    1 |    1 | 1     | 1     |
|  2 | 21/JAN/2018 |       2 |            2 |    2 |    2 | null  | 2     |
|  3 | 21/JAN/2018 |       3 |            3 |    3 |    3 | null  | null  |
+----+-------------+---------+--------------+------+------+-------+-------+

এবং ক্যোয়ারী:

DELETE FROM the_table
WHERE NOT EXISTS (SELECT *
                  FROM the_table t1
                  NATURAL JOIN the_table t2
                  WHERE id = the_table.id);

আউটপুট:

+----+-------------+---------+--------------+------+------+-------+-------+
| id |    date_    | persons | two_wheelers | cars | vans | buses | autos |
+----+-------------+---------+--------------+------+------+-------+-------+
|  1 | 21/JAN/2018 |       1 |            1 |    1 |    1 |     1 |     1 |
+----+-------------+---------+--------------+------+------+-------+-------+

ডিবিফিডাল ডেমো

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.