उन तालिका पंक्तियों से हटाएं जहां कोई भी स्तंभ फ़ील्ड शून्य है


12

क्या किसी तालिका से एक पंक्ति को हटाने का एक तरीका है जहां कोई भी स्तंभ फ़ील्ड स्पष्ट रूप से निर्दिष्ट किए बिना रिक्त है, कौन सा स्तंभ शून्य है?

मैं postgreSQL का उपयोग कर रहा हूं।

यहाँ मेरा संबंध स्कीमा है:

  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 | 

धन्यवाद

जवाबों:


19

मैं ऐसा करने के दो तरीके देखता हूं:

सादे मानक एसक्यूएल के साथ, बस सभी कॉलमों को सूचीबद्ध करें और इसे OR के साथ संयोजित करें:

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कुछ अलग है - यह केवल उन पंक्तियों से मेल खाती है जहां सभी कॉलम अशक्त हैं।

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

धन्यवाद! मुझे लगता है कि दूसरा समाधान वह समाधान है जिसकी मुझे तलाश थी।
सितंबर को शाम


मुझे वास्तव में स्पष्ट और संक्षिप्त where not (the_table is not null);दृष्टिकोण पसंद है। सबसे अच्छा मैं सामान्य एसक्यूएल में क्या सोच सकता हूं NATURAL JOIN
2020 पर लैड 2025

0

यदि आप प्रत्येक कॉलम को निर्दिष्ट नहीं करना चाहते हैं जिसका आप उपयोग कर सकते हैं NOT EXISTS ... NATURAL JOIN

चेतावनी! यह समाधान प्रदर्शन के दृष्टिकोण से सर्वश्रेष्ठ नहीं है। यह Oracle / PostgreSQL / SQLite / MariaDB 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 |
+----+-------------+---------+--------------+------+------+-------+-------+

DBFiddle डेमो

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.