2011-08-26 12 views
5

मुझे यह समझाया गया है कि इस एसक्यूएल (एक MySQL स्थापना से) वास्तव में करता है कोशिश कर रहा हूँ पार्स करने के लिए कोशिश कर रहा है:इस एसक्यूएल

IF(coalesce(a.entity_id, 0) != 0, 0, 1) 

जबकि मैं समझता हूँ कि क्या सम्मिलित मुझे समझ नहीं आता कि कैसे अगर बयान है करता है इसे संशोधित करना

उत्तर

3

मुझे लगता है कि:

सम्मिलित (a.entity_id, 0) - पहले नहीं शून्य मान लौटने के लिए,

अगर a.entity_id रिक्त नहीं है आप 0 यदि का एक परिणाम है, और 1 के रूप में मिलता है।

a.entity_id = अशक्त => सम्मिलित = 0 => अगर = 1

a.entity_id रिक्त नहीं है => सम्मिलित = a.entity_id => अगर = 0

2

सम्मिलित पहली गैर रिटर्न -n ull तर्क। तो यदि a.entity_id शून्य है, तो coalesce 0 लौटाएगा। जिसमें अगर() है तो जांच करता है कि तर्क शून्य नहीं है, और 0 या 1.

मूल रूप से यह a.entity_id IS NULL लिखने का एक ठोस तरीका है।

+4

'a.entity_id IS NULL या a.entity_id = 0' है –

1

आप MySQL IF() फ़ंक्शन देख रहे हैं। मूल रूप से यह तर्क 1. (यह अपने प्रश्न है कि आप उस COALESCE कर रहा है के साथ समझा से लग रहा है।)

  • तो expr1 सही है (expr1 <> 0 और expr1 <> शून्य में आपूर्ति बूलियन अभिव्यक्ति पर एक त्रिगुट ऑपरेटर है) तो अगर() expr2 देता है;
  • यदि expr1 गलत है, तो यह expr3 देता है।

IF() एक संख्यात्मक या स्ट्रिंग मान देता है, किस संदर्भ में उसे प्रयोग किया जाता है पर निर्भर करता है।

mysql> SELECT IF(1>2,2,3); 
     -> 3 
mysql> SELECT IF(1<2,'yes','no'); 
     -> 'yes' 
mysql> SELECT IF(STRCMP('test','test1'),'no','yes'); 
     -> 'no' 

यह a.entity_id IS NULL का उपयोग नहीं कर का एक बहुत फैशनेबल गैर पठनीय तरीका है।

0

मेरे लिए ऐसा लगता है कि इस खंड को 0 पर अगर a.entity_id रिक्त नहीं है 1 अन्यथा का मूल्यांकन करेंगे, और।

1

हालत को पूरा किया जाएगा यदि a.entity_id कि NULLऔर नहीं 0 नहीं है एक मूल्य है।