Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để so sánh hai trường / cột trong một điều kiện?

Bất cứ khi nào gặp sự cố truy vấn, hãy kiểm tra xem những truy vấn nào thực sự đang được tạo (ví dụ:sử dụng DebugKit ). Trừ khi là một đối tượng biểu thức, phía bên phải của điều kiện sẽ luôn bị ràng buộc dưới dạng một tham số, tức là bạn đang so sánh với một chuỗi ký tự:

Pupils.school_id = 'Schools.id'

Nói chung để tương thích với trích dẫn tự động thích hợp, tên cột phải là biểu thức định danh. Trong khi phía bên tay trái sẽ tự động được xử lý đúng cách, phía bên tay phải sẽ yêu cầu được xử lý theo cách thủ công.

Trong trường hợp cụ thể của mình, bạn có thể dễ dàng sử dụng QueryExpression::equalFields() , đề cập đến chính xác những gì bạn đang cố gắng thực hiện, so sánh các trường / cột:

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

Cũng có thể tạo biểu thức định danh theo cách thủ công bằng cách khởi tạo chúng:

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

hoặc kể từ CakePHP 3.6 thông qua Query::identifier() phương pháp:

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

Và cuối cùng, bạn cũng có thể luôn chuyển một giá trị chuỗi đơn, về cơ bản được chèn vào truy vấn dưới dạng SQL thô, tuy nhiên trong trường hợp đó, các số nhận dạng sẽ không phải tuân theo việc trích dẫn số nhận dạng tự động:

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

Xem thêm




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. chức năng làm sạch đầu vào cho cơ sở dữ liệu Mysql

  2. Ý nghĩa của n:m và 1:n trong thiết kế cơ sở dữ liệu

  3. Sự cố cài đặt mysql-python (trên mac os x lion)

  4. laravel 4 - làm thế nào để Giới hạn (Lấy và Bỏ qua) cho ORM Hùng biện?

  5. sự cố cảnh báo:mong đợi tham số 1 là mysqli_result