Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

उन पंक्तियों को कैसे प्राप्त करें जिनके कॉलम मान शून्य नहीं हैं

मुझे कुछ मिला, लेकिन इसका अर्थ है CURSOR . का उपयोग करना

DECLARE @ColumnName VARCHAR(200)
DECLARE @ColumnCount INT
DECLARE @sql VARCHAR(400)

CREATE TABLE #tempTable (Id INT)

DECLARE GetNonNullRows CURSOR 
FOR 
    SELECT c.NAME, (SELECT COUNT(*) FROM sys.columns col WHERE col.object_id = c.OBJECT_ID)  FROM sys.tables AS t
    JOIN sys.columns AS c ON t.object_id = c.object_id
    WHERE t.name = 'SomeTable' AND t.type = 'U'

OPEN GetNonNullRows
FETCH NEXT FROM GetNonNullRows INTO @ColumnName, @ColumnCount
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @sql = 'SELECT st.UniqueId FROM SomeTable AS st WHERE ' + CONVERT(varchar, @ColumnName) + ' IS NOT NULL'    
    INSERT INTO #tempTable
    EXEC (@sql)

FETCH NEXT FROM GetNonNullRows INTO @ColumnName, @ColumnCount
END 

CLOSE GetNonNullRows
DEALLOCATE GetNonNullRows

SELECT * FROM SomeTable AS st1
WHERE st1.UniqueId IN (SELECT Id FROM #tempTable AS tt
GROUP BY Id
HAVING COUNT(Id) = @ColumnCount)


DROP TABLE #tempTable

मुझे इसे थोड़ा समझाएं।

सबसे पहले मैं कर्सर बनाता हूं जो एक टेबल के सभी कॉलम के माध्यम से पुनरावृत्त होता है। प्रत्येक कॉलम के लिए, मैंने चयनित कॉलम के लिए शून्य मानों के लिए तालिका में खोजने के लिए एसक्यूएल स्क्रिप्ट बनाई है। उन पंक्तियों के लिए जो मानदंडों को पूरा करती हैं, मैं इसकी विशिष्ट आईडी लेता हूं और अस्थायी तालिका में डालता हूं, और यह नौकरी मैं सभी स्तंभों के लिए उपयोग कर रहा हूं।

अंत में केवल आईडी जो कॉलम गिनती की तरह है, आपका परिणाम सेट है, क्योंकि केवल पंक्तियां जिनमें समान संख्या में उपस्थितियां हैं जैसे तालिका में कॉलम की संख्या सभी कॉलम में सभी गैर शून्य मानों वाली पंक्तियां हो सकती हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. उप क्वेरी के साथ mysql अद्यतन क्वेरी

  2. रेल `कहां` प्रश्नों से कम समय के लिए

  3. उपयोगकर्ताओं के बीच केकफ़्पी दोस्ती मॉडल को एक साथ जोड़ना

  4. LAST_INSERT_ID ( ) 0 की एक से अधिक पंक्तियाँ लौटा रहा है?

  5. MySQL LOAD_FILE NULL लौटा रहा है