Mysql
 sql >> база данни >  >> RDS >> Mysql

Doctrine DQL присъединяване към колони с нула

Решение 1:Doctrine Native SQL

Един от начините да постигнете това е чрез използване на собствени MySQL заявки. Това изисква използването на Нативния SQL на Doctrine функция и картографиране на резултатите от заявката с помощта на ResultSetMapping .

Попаднах на проблем при изпълнение на собствена SQL заявка два пъти (с различни параметри), че наборът от резултати на втората заявка беше същият като първия.Следна публикация в GitHub реши това вместо мен.

Решение 2:Използване на вътрешния оптимизатор на MySQL

Използването на следното условие за присъединяване ще използва вътрешния оптимизатор на MySQL и ще третира това като ref_or_null тип присъединяване

SELECT a.*, b.* 
FROM a
   INNER JOIN b ON 
       a.column = b.column 
       OR (a.column IS NULL AND b.column IS NULL)

След това е възможно да се използва това условие за присъединяване в DQL, което ще бъде добре преведено в SQL, за да бъде оптимизирано.

Решение 3:Напишете персонализирана DQL функция

Написах персонализирана DQL-функция, която се превежда в следната клауза:

SELECT a.*, b.* 
FROM a
   INNER JOIN b ON (a.column <=> b.column) = 1

За съжаление не успяхме да се отървем от = 1 част от тази клауза. Това проработи, но предизвика майор въздействие върху производителността върху моята заявка:17s срещу 0,5s, за да дам някаква (ненаучна) индикация.
Така че не отидох по-нататък по този път.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Android:как да качите изображение в mysql с помощта на php

  2. Създаване на курсор с Dynamic SQL в MySQL

  3. Генерирайте изрази CREATE за всички MySql таблици

  4. Таблицата не съществува след CREATE TABLE

  5. Извикване на съхранена процедура, която съдържа динамичен SQL от Trigger