access中left join和limit联合分页查询怎么写sql语句?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了access中left join和limit联合分页查询怎么写sql语句?相关的知识,希望对你有一定的参考价值。

网上搜了一下,大部分都是单独说limit如何用access来实现,没有一个说join后如何分页的access sql语句的~
mysql中下面这个语句用access到底怎么写sql语句?求大神帮助~access真够渣的!
select a.*, b.name, b.id from table1 as a join table2 as b on a.id = b.id where a.effect = 1 order by a.date limit size,page;

参考技术A 选择a.studentname,a.zhengpic,b.getbookdate的BookInfo为B,BOOKTYPE的作为,a.id = b.studentid b.id = c.id作为一个从studentinfo,追问

没看明白~能写出完整的语句给我吗?我真的不会用access

参考技术B select * from (select top size * from (select top size*page a.*, b.name, b.id from table1 as a join table2 as b on a.id = b.id where a.effect = 1 order by a.date) order by a.date desc) order by a.date
你试一下,可能有些小错误本回答被提问者采纳

MySQL left join with 'b's limit

【中文标题】MySQL left join with \'b\'s limit【英文标题】:MySQL left join with 'b's limitMySQL left join with 'b's limit 【发布时间】:2017-04-25 19:18:02 【问题描述】:

首先,对不起,我的英语错误。

我有一个关于 mysql 查询加入 b.limit 的问题 显示下面两个表格

表 1:成员

id INT NOT NULL 主键 用户名 VARCHAR(100) 非空 ...

表 2:Members_opt

id INT NOT NULL 主键 members_id VARCHAR(100) 非空 类别 varchar(10) NOT NULL ...

并且一个用户有多个成员选择列。 和 Members.id = Members_opt.members_id。

我想做这个查询

SELECT * FROM Members a, Members_opt b WHERE a.id = b.members_id;

但是这个查询会产生以下结果。

id | user_name | category
01 | John  | cat
01 | John  | dog
01 | John  | bird
02 | olion | cat
03 | jenny | dog

我想要结果是否具有相同的 id 值,只需将“limit 0,1”添加到类别 所以我想要这个结果。

01 | John  | cat
02 | olion | cat
03 | jenny | dog

我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

JOIN 操作表示两个表中所有可能的行组合。因此,如果 John 有一只狗、一只猫和一只鸟,并且您执行普通的 JOIN,您将得到 John 的三行。

SELECT .. FROM a,b WHERE a.something=b.somethingJOIN。它使用老式语法但仍然是 JOIN)。

为了满足您的要求,您需要一种方法来获取一个虚拟表(子查询),每个成员只包含一个宠物。

               SELECT members_id, 
                      MAX(category) category
                 FROM Members_opt
                GROUP BY members_id

会这样做。它选择名称在字母表中最后的类别(宠物)。每个 members_id 值最多返回一行。

然后你将那个虚拟表(子查询)加入到你的另一个表中。

  SELECT a.id, a.user_name, b.category
    FROM Members a
    JOIN (
               SELECT members_id, 
                      MAX(category) category
                 FROM Members_opt
                GROUP BY members_id
         ) b ON a.id = b.members_id

这将为每个显示所选类别的成员返回一行。如果成员没有类别(没有宠物),则此查询将禁止该成员的行。如果您希望查询显示没有宠物的成员,请使用 LEFT JOIN。

注意这个查询

 SELECT *    /* incorrect: nonstandard, unpredictable */ 
   FROM Members a, Members_opt b 
  WHERE a.id = b.members_id
  GROUP BY a.id

滥用了对 MySQL 的 GROUP BY 实现的非标准扩展。它不适用于较新版本的 MySQL,而是会出错。如果它确实有效,它将返回不可预测的结果。读这个。 https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

返回不可预测的结果比返回随机结果更糟糕。当你在 MySQL 中滥用这个 GROUP BY hack 时,每次后续使用查询都会返回相同的结果,直到它不返回。

【讨论】:

【参考方案2】:

您可以使用group by 子句:

SELECT * 
FROM Members a, Members_opt b 
WHERE a.id = b.members_id
GROUP BY a.id

但是如果你使用这个,b 的任何条目都可以被选中。不是说 ID 01 总是从表 b 中获取条目 'cat'。

【讨论】:

是的!我喜欢!我要这个。问题解决了:)谢谢akrys! 是否可以添加“ORDER BY b.id ASC”? 您可以在group by 子句之后添加任何order by,它看起来像GROUP BY a.id ORDER BY b.id ASC。我不确定它是否有用 "GROUP BY a.id ORDER BY b.id ASC" 它有效!谢谢:)

以上是关于access中left join和limit联合分页查询怎么写sql语句?的主要内容,如果未能解决你的问题,请参考以下文章

在 sql 查询中使用 LIMIT 和 ORDER BY 和 LEFT JOIN

使用 LEFT JOIN 和 ORDER BY...LIMIT 查询慢,使用 Filesort

如何在 LEFT JOIN 上使用 LIMIT?

MySQL中的LEFT JOIN 和UNIONALL的联合使用

在 SQL ACCESS 中使用 LEFT 或 INNER JOIN 和 WHERE 的问题

MySQL left join with 'b's limit