Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara membandingkan dua bidang/kolom dalam suatu kondisi?

Setiap kali mengalami masalah kueri, periksa kueri apa yang sebenarnya dibuat (misalnya menggunakan DebugKit ). Kecuali menjadi objek ekspresi, sisi kanan kondisi akan selalu terikat sebagai parameter, yaitu Anda membandingkan dengan string literal:

Pupils.school_id = 'Schools.id'

Umumnya untuk kompatibilitas kutipan otomatis yang tepat, nama kolom harus berupa ekspresi pengenal. Sementara sisi kiri secara otomatis akan ditangani dengan benar, sisi kanan harus ditangani secara manual.

Dalam kasus khusus Anda, Anda dapat dengan mudah menggunakan QueryExpression::equalFields() , yang tepat untuk apa yang Anda coba lakukan, membandingkan bidang/kolom:

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

Anda juga dapat membuat ekspresi pengenal secara manual hanya dengan membuat instance:

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

atau pada CakePHP 3.6 melalui Query::identifier() metode:

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

Dan akhirnya Anda juga dapat selalu memberikan nilai string tunggal, yang pada dasarnya dimasukkan ke dalam kueri sebagai SQL mentah, namun dalam hal ini pengidentifikasi tidak akan tunduk pada kutipan pengenal otomatis:

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

Lihat juga




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO:Tidak dapat menemukan driver php/mysql

  2. Tidak dapat membuka dan mengunci tabel hak istimewa:Tabel 'mysql.user' tidak ada

  3. Nama tabel MySQL sebagai parameter

  4. Panduan Merancang Database Untuk Task Manager Di MySQL

  5. Membuat tabel sementara di Prosedur Tersimpan MySQL