Estoy usando supabase con una base de datos que tiene 2 tablas (que están implicadas en este problema). Las tablas son teachers y users . Ambos tienen ID e id_teacher / id_user respectivamente. Estoy trabajando en una consulta donde necesito obtener a todos los maestros, uniéndome a la tabla de users , donde hay una columna de image . Solo necesito obtener los teachers donde el user tiene una image no nula .
const query = supabase.from(`teachers`).select( ` *, id_user( image ) ` )Esta consulta funciona para que los profesores se unan a la tabla de usuarios. Porque obtengo mi respuesta deseada. Este es un breve ejemplo.
{ "id": 560, "teacher_experience": 9, "id_user":{ "image": "example-image.jpg" } } El problema es cuando trato de usar algún filtro para evitar images nulas .
query.not('id_user.image', 'eq', null) query.not('id_user.image', 'in', null) query.ilike('id_user.image', 'null') Son solo algunos ejemplos de los filtros que intenté evitar los maestros cuya imagen de user.image tiene un valor nulo . Porque NO quiero OBTENER el artículo completo, pero obtengo un artículo con id_user = null
{ "id": 560, "teacher_experience": 9, "id_user": null // In this case image is null but still giving me the user }¿Cómo es la forma correcta de resolver esto?
Simplemente cree una view en la base de datos para resolver este problema. Una view es un acceso directo a las consultas y es posible aplicar la cláusula where .
En el editor sql en supabase https://app.supabase.io/project/{your_project_id}/editor/sql
crear una nueva vista con uniones;
CREATE VIEW teachers_view AS SELECT t.*, iu.image as image FROM teachers as t LEFT JOIN id_user as iu WHERE t.id = iu.teacher_id;lea más sobre la combinación izquierda aquí
y en el uso de la aplicación
supabase.from('teachers_view').select().neq('image', null);query.not("your_column_name", "is", "NULL")¡trabajó para mi!
bastante extraño, si quieres comprobar NULL
.filter("your_column_name", "is", "NULL")parece ser la solución. No tengo idea de por qué no es consistente.
No es posible cajero automático. Puedes ver el estado de la cuestión aquí. Algunas posibilidades son usar views o iniciar la consulta en la otra tabla.