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

किसी स्थिति में दो फ़ील्ड/कॉलम की तुलना कैसे करें?

जब भी क्वेरी समस्याओं का सामना करना पड़े, तो जांचें कि वास्तव में कौन से प्रश्न उत्पन्न हो रहे हैं (उदाहरण के लिए डीबगकिट ) जब तक कि एक अभिव्यक्ति वस्तु न हो, एक शर्त के दाहिने हाथ हमेशा एक पैरामीटर के रूप में बंधे रहेंगे, यानी आप एक स्ट्रिंग अक्षर के खिलाफ तुलना कर रहे हैं:

Pupils.school_id = 'Schools.id'

आम तौर पर उचित ऑटो उद्धरण संगतता के लिए, कॉलम नाम पहचानकर्ता अभिव्यक्ति होना चाहिए। जबकि बाएं हाथ की ओर स्वचालित रूप से ठीक से संभाला जाएगा, दाहिने हाथ को मैन्युअल रूप से संभालने की आवश्यकता होगी।

अपने विशिष्ट मामले में आप आसानी से उपयोग कर सकते हैं QueryExpression::equalFields() , जो कि ठीक वही है जो आप करने का प्रयास कर रहे हैं, फ़ील्ड/कॉलम की तुलना करना:

->where(function (\Cake\Database\Expression\QueryExpression $exp, \Cake\ORM\Query $query) {
    return $exp->equalFields('Pupils.school_id', 'Schools.id');
})

पहचानकर्ता भावों को केवल तत्काल करके मैन्युअल रूप से बनाना भी संभव है:

->where([
    'Pupils.school_id' => new \Cake\Database\Expression\IdentifierExpression('Schools.id')
])

या केकेपीएचपी 3.6 के रूप में Query::identifier() . के माध्यम से विधि:

->where([
    'Pupils.school_id' => $query->identifier('Schools.id')
])

और अंत में आप हमेशा एक स्ट्रिंग मान भी पास कर सकते हैं, जो मूल रूप से कच्चे एसक्यूएल के रूप में क्वेरी में डाला जाता है, हालांकि उस स्थिति में पहचानकर्ता स्वचालित पहचानकर्ता उद्धरण के अधीन नहीं होंगे:

->where([
    'Pupils.school_id = Schools.id'
])

यह भी देखें




  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. दिया गया सिंटैक्स mysql में मान्य क्यों है?

  4. क्या MySQL स्ट्रिंग्स को || . के साथ जोड़ सकता है

  5. mysql टिनींट (1) बनाम टिनींट (2) बनाम टिनींट (3) बनाम टिनींट (4)