MYSQL内连接有限制吗?

标签 mysql inner-join limit

我有两张表,一张保存工具,另一张保存工具历史记录,例如位置和谁拥有它。我需要在此表上运行搜索问题并尝试过此操作

SELECT tblmaskin.* 
FROM `tblmaskin` 
INNER JOIN tblmaskinhistorik ON tblmaskin.maskinId=tblmaskinhistorik.maskinId 
WHERE tblmaskin.maskin='".$_POST['sok']."' 
OR tblmaskinhistorik.var='".$_POST['sok']."'
 OR  tblmaskinhistorik.anvandarnamn='".$_POST['sok']."'

但问题是我只想在历史表中搜索该工具的最后插入行。例如,当您按地点搜索工具时,您只想获取现在就在那里的工具。

有办法做到这一点吗?

SQL Fiddle example .

最佳答案

旁注:看起来您正在使用 PHP,但没有使用准备好的语句,请查看 PDOmysqli避免SQL injection

实际上有一个 article in official MySQL docs关于这个+类似的事情已经解决了herehere .

您需要运行子查询来获取“最新”历史记录的 ID(假设具有最大 ID 的记录是正确的),然后使用该 ID 来获取正确的记录。

注意:我已将您的内联 php 变量替换为 PDO's named placeholders

SELECT tblmaskin.* 
FROM `tblmaskin` 
-- Select record from tblmaskinhistorik with the highest id
INNER JOIN (SELECT maskinId, MAX(maskinhistId) AS maxid
           FROM tblmaskinhistorik
           GROUP BY maskinId) AS t_max
    ON t_max.maskinId = tblmaskin.maskinId
-- Joining whole row
INNER JOIN tblmaskinhistorik ON t_max.maxid=tblmaskinhistorik.maskinhistId
WHERE tblmaskin.maskin=:sok 
    OR tblmaskinhistorik.var=:sok
    OR tblmaskinhistorik.anvandarnamn=:sok

对查询运行 EXPLAIN 以确保其高效工作。

关于MYSQL内连接有限制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26462966/

相关文章:

mysql - sql查询使用join从2个表中检索数据

inner-join - 使用带有多部分标识符和 Having 子句的内部连接进行选择

MySQL - 获取连接表的最新值的最有效方法

mysql - 限制每行返回的最大值

php - 访问被拒绝 'sec_user' @'localhost'

javascript - 我如何更改 sequelize 中包含字段的名称?

mysql - 我正在尝试使用 INNER JOIN 将 4 个表链接在一起

asp.net - 如何执行求和运算,排除第一条记录

mysql - 从数据库中选择日期时我想添加 5 :30 to created_at date in the database

Clojure/Ring : Using the ring jetty adapter, 大请求给我 413 : FULL HEAD error.