SELECT forum_id, forum_project, forum_description, forum_owner, forum_name,forum_moderated, forum_create_date,
forum_last_date,sum(case c.message_parent=-1 when true then 1 when false then 0 ELSE null END) as forum_topics,
sum(case c.message_parent >0 when true then 1 when false then 0 ELSE null END) as forum_replies,
user_username, project_name, project_color_identifier, (contact_first_name ||','||contact_last_name) AS owner_name,
SUBSTRING(l.message_body from 1 for 30) AS message_body,LENGTH(l.message_body) AS message_length, watch_user, l.message_parent,
l.message_id,count(distinct v.visit_message) as visit_count, count(distinct c.message_id) as message_count
FROM "projects" AS pr,"users" AS u,"forums" AS forums
LEFT JOIN "forum_messages" AS l ON l.message_id = forum_last_id
LEFT JOIN "forum_messages" AS c ON c.message_forum = forum_id
LEFT JOIN "forum_watch" AS w ON watch_user = 1 AND watch_forum = forum_id
LEFT JOIN "forum_visits" AS v ON visit_user = 1 AND visit_forum = forum_id and visit_message = c.message_id
LEFT JOIN "contacts" AS cts ON contact_id = u.user_contact
LEFT JOIN "companies" AS co ON co.company_id = pr.project_company
LEFT JOIN "project_departments" AS project_departments ON pr.project_id = project_departments.project_id
LEFT JOIN "departments" AS dep ON dep.dept_id=project_departments.department_id
WHERE user_id = forum_owner AND pr.project_id = forum_project AND project_active = 1
GROUP BY forum_id,forum_project,forum_description,forum_owner, forum_name,forum_moderated, forum_create_date, user_username, project_name, project_color_identifier,
forum_last_date
ORDER BY forum_name asc
me da el siguiente error
ERROR: invalid reference to FROM-clause entry for table "u"
Estado SQL:42P01
Sugerencias:There is an entry for table "u", but it cannot be referenced from this part of the query.
Luces para salir del atolladero
gracias
Re: Consultas complejas
Mié, 02/09/2009 - 21:47 — rafaelmaEste error es por usar unos 'joins' definidos con comas y otros con la sentencia JOIN en la misma consulta.
Segun el estandar SQL la palabra JOIN tiene mayor prioridad que la coma cuando se definen joins y se evalua internamente la consulta. Por ello, el alias 'u' que defines con '"users" AS u' no esta disponible en el 'ON contact_id = u.user_contact'.
No definas joins de dos maneras diferentes en la misma consulta. Define '"projects" AS pr,"users" AS u,"forums" AS forums' con sentencias JOIN.
--
Rafael Martinez
Webmaster
Documentacion profunda sobre estandar SQL
Jue, 03/09/2009 - 21:19 — beatleosRafael mucho agradeceré que me indiques donde puedo conseguir documentacion profunda sobre estandar SQL
Estandard SQL
Vie, 04/09/2009 - 10:42 — rafaelmaEl nombre oficial del standard SQL es "ISO/IEC 9075 "Database Language SQL"".
Este documento ha tenido diferentes versiones/revisiones durante los años, las últimas en 1992, 1999, 2003 y 2008, por ello se suele denominar SQL92, SQL99, SQL2003 y SQL2008 cuando se habla del estandard que la base de datos soporta.
En las últimas versiones del documento se han separado las funcionalidades del estandard en las de tipo obligatorias (core) y opcionales. A dia de hoy, ninguna base de datos de las que existen tiene implementado al 100% las funcionalidades obligatorias definidas en SQL2008.
El proyecto PostgreSQL siempre ha sido un partidario ferviente de seguir los estandares. De las 179 características obligatorias definidas en SQL2008, PostgreSQL cumple con mas de 160, y sigue trabajando para mejorar dia a dia.
Aprender SQL siguiendo el documento "ISO/IEC 9075 "Database Language SQL"", no es en absoluto recomendable ;-). Existen muy buenos libros sobre el tema, pero para empezar puedes usar el manual oficial de PostgreSQL.
En http://www.postgresql.org/docs/current/static/sql.html tienes mucha información sobre SQL y aunque algunas cosas son específicas de PostgreSQL, sigue el standard SQL definido en ISO/IEC 9075.
Más información sobre las diferentes versiones de ISO/IEC 9075:
http://en.wikipedia.org/wiki/SQL-92 [ingles]
http://en.wikipedia.org/wiki/SQL:1999 [ingles]
http://en.wikipedia.org/wiki/SQL:2003 [ingles]
http://es.wikipedia.org/wiki/SQL:2003 [español]
http://en.wikipedia.org/wiki/SQL:2008 [ingles]
Información sobre la implementación de ISO/IEC 9075 en PostgreSQL en:
http://www.postgresql.org/docs/current/interactive/features.html
Un libro muy bueno sobre bases de datos en general es:
"Database Systems , The Complete Book, de Jennifer Widom - Hector Garcia-Molina - Jeffrey D. Ullman, EAN/ISBN13: 9780131354289"
Con ese libro aprenderas no solo SQL, sino como las bases de datos relacionales funcionan en sus entrañas.
--
Rafael Martinez
Webmaster
Agradecimiento
Vie, 04/09/2009 - 16:32 — beatleosRafael quedo muy agradecido con toda tu ayuda
OPTIMIZAR VISTA
Lun, 12/07/2010 - 16:59 — Anónimoestoy haciendo una migracion en de datos a postgresql,y tengo una vista llamada prueba_ mejoras y esta es muy lenta......... tarda 59626 ms,y necesiti entregra el proyecto el di 15/07, es esta:
-- View: bdcne.prueba_mejoras
-- DROP VIEW bdcne.prueba_mejoras;
CREATE OR REPLACE VIEW bdcne.prueba_mejoras AS
SELECT DISTINCT t_datas.cedula, t_datas.primer_nombre, t_datas.segundo_nombre, t_datas.primer_apellido, t_datas.segundo_apellido, t_datas.direccion, t_datas.fecha_nacimiento, t_datas.id_parroquia, t_parroquias.descripcion AS parroquia, t_datas.id_municipio, t_datas.id_estado, t_municipios.descripcion AS municipio, t_municipios.cod_circuito AS codigo, t_datas.id_data, t_escabinos.id_excusa
FROM bdcne.t_escabinos t_escabinos
JOIN bdcne.t_datas t_datas ON t_escabinos.cedula = t_datas.cedula
JOIN bdcne.t_municipios t_municipios ON t_municipios.id_municipio::numeric = t_datas.id_municipio
JOIN bdcne.t_parroquias t_parroquias ON t_parroquias.id_parroquia::numeric = t_datas.id_parroquia
WHERE t_datas.anulacion IS NULL
ORDER BY t_datas.cedula, t_datas.primer_nombre, t_datas.segundo_nombre, t_datas.primer_apellido, t_datas.segundo_apellido, t_datas.direccion, t_datas.fecha_nacimiento, t_datas.id_parroquia, t_parroquias.descripcion, t_datas.id_municipio, t_datas.id_estado, t_municipios.descripcion, t_municipios.cod_circuito, t_datas.id_data, t_escabinos.id_excusa;
por favor ayuda
Re: OPTIMIZAR VISTA
Lun, 12/07/2010 - 23:00 — rafaelmaEsta es una nueva pregunta que no tiene nada que ver con la consulta primera de este tema de foro. Por favor crea un nuevo tema, por ejemplo, en el foro sobre SQL, http://www.postgresql-es.org/forum/9.
Y no olvides mandar el resultado de ejecutar:
EXPLAIN ANALYZE "tu consulta"
Enviar nuevo comentario