मैं एक MySQL क्वेरी कैसे चला सकता हूं जो शून्य नहीं है जो सब कुछ चुनता है? यहजहां सभी शून्य नहीं हैं
SELECT * FROM schedule WHERE ((all)) IS NOT NULL
क्या मैं बस सभी को हटा दूंगा ..?
SELECT * FROM schedule WHERE IS NOT NULL
मैं एक MySQL क्वेरी कैसे चला सकता हूं जो शून्य नहीं है जो सब कुछ चुनता है? यहजहां सभी शून्य नहीं हैं
SELECT * FROM schedule WHERE ((all)) IS NOT NULL
क्या मैं बस सभी को हटा दूंगा ..?
SELECT * FROM schedule WHERE IS NOT NULL
आपको प्रत्येक कॉलम पर स्पष्ट रूप से स्थिति बताना होगा, उदाहरण के लिए
SELECT *
FROM schedule
WHERE id IS NOT NULL
AND foo IS NOT NULL
AND bar IS NOT NULL; -- and so on..
पर छवि और स्वीकृत उत्तर देखें, इसलिए यह सब कुछ प्राप्त करना संभव नहीं है जहां यह शून्य नहीं है ...अरे नहीं। – Sam
मेरा मानना है कि एक रास्ता है, कृपया मेरा जवाब देखें। – Anax
एनाक्स ने मुझे एक विचार दिया ताकि मैं देख रहा था। नीचे मैंने इसे बनाने के लिए एक तरीका जोड़ा ताकि आपके पास एक चुनिंदा कथन हो ताकि आपको कई स्तंभों के माध्यम से फिर से शुरू करने की आवश्यकता न हो। उपयोगी यदि आपके पास एक गतिशील तालिका है जहां आप अपना चयन कथन – Sam
यह बिल्कुल "सब कुछ है कि अशक्त नहीं है" द्वारा तुम क्या मतलब है पर निर्भर करते हैं:
सभी स्तंभों null
select * from schedule where col1 is not null AND col2 is not null AND ..
कम से कम एक स्तंभ नहीं होना चाहिए non-null
select * from schedule where col1 is not null OR col 2 is not null OR ..
कम से कम यह कैसे आप "सामान्य एसक्यूएल" में ऐसा होता है। मुझे नहीं पता कि MySQL के लिए इसके लिए विशेष वाक्यविन्यास है या नहीं।
SELECT *
FROM SCHEDULE
WHERE ID || FOO || BAR IS NOT NULL;
आप क्रम में केवल एक जहां शर्त लिखने के लिए क्षेत्रों को श्रेणीबद्ध कर सकते हैं नाम और एक पैरामीटर का उपयोग कर अशक्त नहीं तो जांच के बजाय उन सब में टाइप करने के लिए व्यक्तिगत रूप से जैसे
**code SQL**
Select *
FROM Schedule
WHERE @ColumnName IS NOT NULL
**code c#**
for(int i =0; i<parameterArray[].length; i++)
{
command.Parameters.Add(new SqlParameter("ColumnName", parameterArray[i]));
command.Execute();
}
मैं लेनदेन उपयोग करने का सुझाव है ताकि आप एक बैच में ऊपर कर सकते हैं के बाद पाश के लिए के माध्यम से समाप्त हो गया है जाएगा ।
अपडेट नहीं कर सकते हैं तो यह एक अच्छा शॉर्टेंड है लेकिन सलाह दी जा सकती है; यह सभी डेटाबेस में जरूरी नहीं होगा। उदाहरण के लिए, पोस्टग्रेज़ के बाद के संस्करण केवल तभी स्वीकार करेंगे जब पहला कॉलम टेक्स्ट प्रकार का हो; जैसे वर्चर, चार या टेक्स्ट। मैं कुछ डेटाबेसों की कल्पना भी कर सकता हूं ताकि प्रत्येक कॉलम के लिए कास्ट की आवश्यकता हो जो कि इस प्रकार का नहीं है। – pyrocumulus
यदि आपके पास लंबे टेक्स्ट फ़ील्ड हैं, तो कॉन्सटेनेशन एक महंगा ऑपरेशन है। इसके अलावा, परिणाम की लंबाई बहुत लंबी हो सकती है, एक त्रुटि बहती है। – Kobi
यदि आपके पास लंबे टेक्स्ट फ़ील्ड हैं, तो आप इसका उपयोग कर सकते हैं: कहां आईडी || सबस्ट्र (फूड, 1,1) || SUBSTR (भोजन, 1,1) पूर्ण नहीं है; इस तरह, आप केवल हर लंबे टेक्स्ट फ़ील्ड के पहले अक्षर को निकालते हैं। – UltraCommit
यदि आप किसी अन्य प्रोग्रामिंग एसक्यूएल के साथ संयुक्त भाषा का प्रयोग कर रहे हैं, तो आप स्तंभ की एक सूची के माध्यम से पाशन द्वारा इस प्रक्रिया में तेजी लाने सकता है:
आपको info_schema डेटाबेस को देखकर, अपनी तालिका के कॉलम की एक सूची प्राप्त करने की आवश्यकता है।
मान लीजिए कि आपके डेटाबेस को mydata
कहा जाता है और प्रश्न में आपकी तालिका का नाम mytable
है। आप निम्नलिखित बयान जारी करके तालिका के नल स्तंभों की सूची प्राप्त कर सकते हैं:
SELECT `COLUMN_NAME`
FROM `information_schema`.`COLUMNS`
WHERE `TABLE_SCHEMA` = 'mydata'
AND `TABLE_NAME` = 'mytable'
AND `IS_NULLABLE` = 'YES'
हमारा अंतिम क्वेरी इस तरह दिखेगा:
SELECT * FROM `mydata`.`mytable`
WHERE CONCAT(<list of columns>) IS NOT NULL
सभी अब हम याद कर रहे हैं नल स्तंभों की सूची है, अल्पविराम से अलग।
SET @query = CONCAT(
'SELECT * FROM `mydata`.`mytable` WHERE CONCAT(',
(SELECT GROUP_CONCAT(COLUMN_NAME)
FROM `information_schema`.`COLUMNS`
WHERE `TABLE_SCHEMA` = 'mydata' AND
`TABLE_NAME` = 'mytable'
AND `IS_NULLABLE` = 'YES'),
') IS NOT NULL');
PREPARE stmt_name FROM @query;
EXECUTE stmt_name;
संदर्भ::
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
http://dev.mysql.com/tech-resources/articles/4.1/prepared-statements.html
मैं सिर्फ देखा है हम अंतिम बयान है, जो हम इस तरह निष्पादित करेंगे निर्माण करने के लिए GROUP_CONCAT
समारोह का उपयोग करने के लिए जा रहे हैं अपने linked question पर और गुफ़ा के उत्तर से सहमत हैं कि आपको अपना डेटाबेस सामान्यीकृत करना चाहिए।
अधिक एक स्प्रेडशीट फिर कुछ ऐसा एक RDBMS में अंतर्गत आता है की तरह ऊपर दिखता है।
इस बारे में अपनी चिंताओं का उत्तर देने के लिए जिस तरह से आप इसे प्रदर्शित करना चाहते हैं। आप एक पिवट क्वेरी लिख सकते हैं और इसे अपनी वर्तमान तालिका संरचना की नकल करने के लिए एक दृश्य में डाल सकते हैं और इसे अपनी प्रदर्शन क्वेरी के लिए उपयोग कर सकते हैं।
जब भी आप डेटा खोजना चाहते हैं या यह पता लगाना है कि यह इस प्रश्न में नल है तो यह कुछ भयानक 24 कॉलम कहां खंड की आवश्यकता से बच जाएगा।
मैं ऐसा नहीं होगा, लेकिन to replace someone else's horrible idea., विशेष रूप से ऐसा नहीं करते हैं - यह है कि वे क्या सुझाव दिया है:
SELECT *
FROM SCHEDULE
WHERE ID || FOO || BAR IS NOT NULL;
या तो ऐसा मत करो, लेकिन कम से कम यह रूप में नहीं है बुरा ...
SELECT *
FROM SCHEDULE
WHERE coalesce(ID, FOO, BAR) IS NOT NULL;
यह कम से कम एसक्यूएल के अन्य संस्करणों पर काम करता है, और कुछ compilers IS NOT NULL
की एक श्रृंखला के लिए यह विस्तार होगा।
उपयोग एक्सएमएल आप अपने सभी कॉलम के माध्यम से पुनरावृति की जरूरत नहीं है तो:
--Your Source Table
CREATE TABLE [dbo].[schedule](
[id] [nchar](10) NULL,
[col1] [nchar](10) NULL,
[col2] [nchar](10) NULL,
[col3] [nchar](10) NULL
) ON [PRIMARY]
--I know my result should show items NOT NULL, like id:2,col1,val:'a'
INSERT INTO [schedule](id,col1,col2,col3)
values
(1,null,null,null),
(2,'a',null,null),
(3,null,'b',null),
(4,null,null,null),
(5,null,null,'c')
--temp placeholder table
CREATE TABLE #tempsch (id VARCHAR(max) not null, schColumns XML)
--Load temp table with XML version of your table
INSERT INTO #tempsch (id, schColumns)
SELECT s.id,
( SELECT *
FROM [schedule] AS x
WHERE x.id = s.id
FOR XML PATH('bar'), TYPE, ROOT('foo')
) AS xml_format_string
FROM [schedule] AS s
--This select should return all values Where all is NOT NULL
SELECT id,
sd.c.value('local-name(.)', 'VARCHAR(MAX)') AS elementName,
sd.c.value('.', 'VARCHAR(MAX)') AS elementValue
FROM #tempsch s
CROSS APPLY schColumns.nodes('/foo/bar/*') sd(c)
WHERE
sd.c.value('local-name(.)', 'VARCHAR(MAX)') <> 'id'
यह केवल चार और varchar प्रकार के साथ काम करता है। यदि आपके पास अन्य डेटाटाइप हैं तो यह त्रुटि फेंकता है।
SELECT *
FROM SCHEDULE
WHERE coa
lesce(ID, FOO, BAR) IS NOT NULL;
असंगत डेटाटाइप्स: उम्मीद CHAR
मिला DATE
नोट: यहाँ FOO
तारीख प्रकार का है।
यदि आप उदाहरण डेटा जोड़ते हैं और आपके प्रश्न – Naktibalda
पर अपेक्षित परिणाम जोड़ते हैं तो यह उपयोगी होगा यदि मुझे नहीं लगता कि इससे उत्तर में कोई फर्क पड़ता है। – Sam
बेशक यह होगा ... आपने हमें जानकारी नहीं दी कि क्या शून्य नहीं होना चाहिए ... एक उदाहरण हमें दिखा सकता है कि आप किस चीज की उम्मीद कर रहे हैं! – Fred