Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak porównać dwa pola/kolumny w warunku?

Za każdym razem, gdy napotkasz problemy z zapytaniami, sprawdź, jakie zapytania są faktycznie generowane (na przykład używając Zestaw debugowania ). O ile nie jest obiektem wyrażenia, prawa strona warunku będzie zawsze powiązana jako parametr, tj. porównujesz z literałem ciągu:

Pupils.school_id = 'Schools.id'

Generalnie, aby zapewnić odpowiednią zgodność autocytowania, nazwy kolumn powinny być wyrażeniami identyfikacyjnymi. Podczas gdy lewa strona będzie automatycznie obsługiwana prawidłowo, prawa strona będzie wymagała ręcznego.

W konkretnym przypadku możesz łatwo użyć QueryExpression::equalFields() , który jest dokładnie tym, co chcesz zrobić, porównując pola/kolumny:

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

Możliwe jest również ręczne tworzenie wyrażeń identyfikatorów, po prostu tworząc ich instancje:

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

lub od CakePHP 3.6 poprzez Query::identifier() metoda:

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

I na koniec zawsze możesz również przekazać pojedynczą wartość ciągu, który jest w zasadzie wstawiany do zapytania jako surowy SQL, jednak w takim przypadku identyfikatory nie będą podlegać automatycznemu cytowaniu identyfikatorów:

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

Zobacz także




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaki jest najlepszy sposób zwracania wartości wyliczenia w MySQL?

  2. Jak skonfigurować replikację MySQL w RHEL, Rocky i AlmaLinux?

  3. Błąd MySQL Entity Framework — Nie można znaleźć określonego dostawcy sklepu w konfiguracji lub jest on nieprawidłowy

  4. Express js req.body zwraca puste

  5. Wstaw obraz do bazy danych za pomocą php