【问题标题】:Limit a left join to latest date in View将左连接限制为视图中的最新日期
【发布时间】:2014-10-21 17:17:34
【问题描述】:

我有一个连接到表的查询,我只想查看基于 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 获得了代码示例

谁能告诉我我正在尝试做的事情是否可行,如果可以,怎么做? :)

更新

好的,我现在有以下 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. 的消息,即使在原始表中也有

【问题讨论】:

  • 为日期添加ORDER BY 子句,然后将结果集限制在第一行。

标签: php sql join


【解决方案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;

【讨论】:

  • 谢谢。抱歉我没看到那个:)
  • 我刚刚意识到这个查询现在只在我的视图中返回一个结果!?
  • 您正在对单个结果进行连接,可能需要放弃 LIMIT 1 并改用 DISTINCT。
【解决方案2】:

您错过了 MySQL 中的视图不允许 from 子句中的子查询这一事实。但是,它们在 select 和 where 和 having 子句中是允许的。

文档:http://dev.mysql.com/doc/refman/5.0/en/create-view.html很清楚:

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

在您的情况下,您可能可以将 from 子句重写为 select 子句中的相关子查询。您还可以使用多层视图来做您想做的事。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-04
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    相关资源
    最近更新 更多