recomendaciones - optimizar consulta en mysql
ActiveRecord agrega ''AND(1=0)'' al final de las consultas (1)
He estado jugando en la consola de los rieles tratando de hacer que las cosas funcionen, y me doy cuenta de que una de mis consultas sigue regresando a cero cuando no debería. Al mirar la consulta SQL generada, me doy cuenta de que se ha agregado AND (1=0)
cada vez. Esto es un poco molesto, y no estoy seguro de por qué está haciendo esto.
Nota: Usando la gema acable.
Pasos para reproducir:
(Después de conectar a mesas en la consola de rieles)
2.1.2 :xxxx > @parent = Parent.take
Parent Load (38.1ms) SELECT `parents`.* FROM `parents` LIMIT 1
=> #<Parent id: 37, ...>
2.1.2 :xxxx > @child = Child.where(id: @parent.actable_id)
SQL (0.7ms) SELECT `childs`.`id` AS t0_r0, `childs`.`attribute` AS t0_r1, FROM `childs`
...
LEFT OUTER JOIN `parents` ON `parents`.`actable_id` = `childs`.`id` AND `parents`.`actable_type` = ''child type'' WHERE `childs`.`id` = 20 AND (1=0)
=> #<ActiveRecord::Relation []>
¿Por qué está pasando esto? ¿Cómo lo hago parar?
Rails generará SQL como AND (1=0)
cuando consulta una columna cuyo valor está en una matriz vacía:
Child.where(id: [])
Intuitivamente, se esperaría que generara SQL como SELECT * FROM children WHERE id IN ()
, pero ()
realidad no es SQL válido. Sin embargo, dado que ninguna fila coincidirá con esa consulta, Rails soluciona esto generando una consulta equivalente que tampoco devuelve filas:
SELECT * FROM children WHERE 1=0;