none
FALTA UNA ENTRADA PARA LA TABLA RRS feed

  • Pregunta

  • Hola, estoy intentado crear esta vista pero me dice que falta una entrada para la tabla "inscripcions" en la clausula FROM

    CREATE VIEW monitors AS
    SELECT * FROM propietats.clients
    WHERE inscripcions.fkclient = client.idclient AND inscripcions.fkcasa = monitors.fkcasa;

    Alguien me puede ayudar? Gracias.

    lunes, 24 de septiembre de 2018 8:16

Respuestas

  • Efectivamente, en el WHERE mencionas un alias llamado "inscriptions", pero la sentencia no tiene forma de saber cual es el significado de "inscriptions" porque no se ha definido por ninguna parte dentro del FROM.

    Mi sospecha es que posiblemente se trata del nombre de otra tabla y se ta ha olvidado indicarla:

    CREATE VIEW monitors AS
    SELECT * FROM client, inscriptions, monitors
    WHERE inscripcions.fkclient = client.idclient AND inscripcions.fkcasa = monitors.fkcasa;

    pero puedo estar completamente equivocado y tu intencion puede que fuera otra. Es necesario definir correctamente el FROM indicando las tablas que se van a usar.

    Por cierto, te recomiendo usar la sintaxis moderna con JOIN y ON en lugar de la sintaxis obsoleta que estas usando con la lista de condiciones de union entre tablas expresada en el WHERE.

    lunes, 24 de septiembre de 2018 9:00
  • A ver, yo lo que quiero es crear una vista, en este caso la vista "monitors". Mas tarde se le asignaran los privilegios de esta vista a un rol que tambien se llama "monitors". 

    La vista debe mostrar un listado de los clientes que esten asignados a la casa que pertenece el monitor. 

    Poniendo esto:

    CREATE VIEW monitors AS
    SELECT * FROM client, inscriptions, monitors
    WHERE inscripcions.fkclient = client.idclient AND inscripcions.fkcasa = monitors.fkcasa;

    Lo que conseguiria seria hacer una lista de todas esas tablas, yo lo que quiero es que solo se muestre la lista de la tabla "clients"

    Gracias por contestar.

    lunes, 24 de septiembre de 2018 9:12

Todas las respuestas

  • Efectivamente, en el WHERE mencionas un alias llamado "inscriptions", pero la sentencia no tiene forma de saber cual es el significado de "inscriptions" porque no se ha definido por ninguna parte dentro del FROM.

    Mi sospecha es que posiblemente se trata del nombre de otra tabla y se ta ha olvidado indicarla:

    CREATE VIEW monitors AS
    SELECT * FROM client, inscriptions, monitors
    WHERE inscripcions.fkclient = client.idclient AND inscripcions.fkcasa = monitors.fkcasa;

    pero puedo estar completamente equivocado y tu intencion puede que fuera otra. Es necesario definir correctamente el FROM indicando las tablas que se van a usar.

    Por cierto, te recomiendo usar la sintaxis moderna con JOIN y ON en lugar de la sintaxis obsoleta que estas usando con la lista de condiciones de union entre tablas expresada en el WHERE.

    lunes, 24 de septiembre de 2018 9:00
  • A ver, yo lo que quiero es crear una vista, en este caso la vista "monitors". Mas tarde se le asignaran los privilegios de esta vista a un rol que tambien se llama "monitors". 

    La vista debe mostrar un listado de los clientes que esten asignados a la casa que pertenece el monitor. 

    Poniendo esto:

    CREATE VIEW monitors AS
    SELECT * FROM client, inscriptions, monitors
    WHERE inscripcions.fkclient = client.idclient AND inscripcions.fkcasa = monitors.fkcasa;

    Lo que conseguiria seria hacer una lista de todas esas tablas, yo lo que quiero es que solo se muestre la lista de la tabla "clients"

    Gracias por contestar.

    lunes, 24 de septiembre de 2018 9:12
  • yo lo que quiero es que solo se muestre la lista de la tabla "clients"

    Entonces, ¿por qué hay en el WHERE otras menciones a otros objetos que no son de clients?

    Si necesitas filtrar por varias tablas (poniendo en el WHERE restricciones sobre ellas), entonces es obligatorio mencionarlas en el FROM. Si NO quieres filtrar por ellas, entonces NO deben estar en el WHERE. Si quieres filtrar, pero no quieres que se mustren datos de esas otras tablas que hay en el FROM, puedes restringir el SELECT citando la tabla cuyos campos quieres:

    SELECT clients.* FROM ...

    lunes, 24 de septiembre de 2018 12:05
  • Otra observación, si va a unir sus tablas, hágalo con la instrucción JOIN
    lunes, 24 de septiembre de 2018 16:20