2014-08-27 52 views
0

我有一个是连接到一个表的查询,我只希望基于DTM的限制左连接到最晚日期在查看

这是我的查询,看看最后输入的结果

CREATE OR REPLACE VIEW vwc_students AS 
SELECT u_students.stud_id,u_students.stud_firstname, u_students.stud_middlename,u_students.stud_lastname, CONCAT_WS(' ',u_userse.user_firstname,u_userse.user_lastname) AS stud_editeduser, u_students.stud_edited, u_tbleeditlog.editedDtm 
FROM u_students 
JOIN u_studsites ON u_studsites.uss_studid = u_students.stud_id 
JOIN u_locations ON u_locations.loc_id = u_students.stud_base 
JOIN u_users ON u_users.user_id = u_students.stud_loggedid 
LEFT JOIN (SELECT editedID, editedDtm FROM u_tbleeditlog WHERE editSite = 1 AND editType = 1 ORDER BY editedDtm DESC LIMIT 1) u_tbleeditlog ON u_tbleeditlog.editedID = u_students.stud_id 
LEFT JOIN u_users AS u_userse ON u_userse.user_id = u_tbleeditlog.editedID 
WHERE u_studsites.uss_siteid = '1' 

但我得到的错误#1349 - View's SELECT contains a subquery in the FROM clause

我从Limiting a left join to returning one result?的代码示例和MySQL JOIN Multiple Tables With LIMIT Last Table By DateTime per result

谁能告诉米如果我想要做的事情是可能的,如果是的话,怎么样? :)

UPDATE

好吧,我现在有以下2条意见建议

CREATE OR REPLACE VIEW vwc_students AS 
SELECT u_students.stud_id,u_students.stud_firstname, u_students.stud_middlename,u_students.stud_lastname, u_userse.editedEditor AS stud_editeduser, u_userse.editedDtm AS stud_edited 
FROM u_students 
JOIN u_studsites ON u_studsites.uss_studid = u_students.stud_id 
JOIN u_locations ON u_locations.loc_id = u_students.stud_base 
JOIN u_users ON u_users.user_id = u_students.stud_loggedid 
LEFT JOIN vwu_editlog AS u_userse ON u_userse.editTypeID = u_students.stud_id AND u_userse.editType = 1 
WHERE u_studsites.uss_siteid = '1' 

CREATE OR REPLACE VIEW vwu_editlog AS 
SELECT u_tbleeditlog.*, CONCAT_WS(' ',u_users.user_firstname,u_users.user_lastname) AS editedEditor 
FROM u_tbleeditlog 
JOIN u_users ON u_users.user_id = u_tbleeditlog.editedID 
ORDER BY u_tbleeditlog.editedDtm DESC LIMIT 1 

但最后这个观点限制了整个事情到1分的结果!我如何将每个唯一ID限制为1?我还得到消息Current selection does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available.,即使在原表是有

+0

为日期添加'ORDER BY'子句,然后将结果集限制在第一行。 – jpaugh 2014-08-27 23:57:10

回答

1

重复的: View's SELECT contains a subquery in the FROM clause

按照文档:

MySQL Docs

  • SELECT语句不能包含FROM子句中的子查询。

您的解决方法是为每个子查询创建一个视图。

然后访问从您的视图中的那些观点view_credit_status

因此,也许你首先做这样的事情:

CREATE OR REPLACE VIEW u_tbleeditlog AS 
SELECT editedID, editedDtm 
    FROM u_tbleeditlog 
    WHERE editSite = 1 
    AND editType = 1 
    ORDER BY editedDtm DESC 
    LIMIT 1; 
+0

谢谢。对不起,我没有看到那一个:) – dpDesignz 2014-08-28 00:00:35

+0

我刚刚意识到这个查询现在只返回一个结果在我看来!? – dpDesignz 2014-08-28 01:15:01

+0

您正在对单个结果进行连接,可能需要丢弃LIMIT 1并使用DISTINCT。 – 2014-08-28 14:55:02

1

你缺少的事实,意见在MySQL不允许在子查询从条款。但是,他们被允许在选择和where和子句中使用。

的文档:http://dev.mysql.com/doc/refman/5.0/en/create-view.html是相当清楚的:

子查询不能视图的FROM子句中使用。

就你而言,你可能可以将from子句改写为select子句中的相关子查询。你也可以使用多层视图来做你想做的事。

为每个FROM子句创建一个单独的视图。