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;
没看明白~能写出完整的语句给我吗?我真的不会用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.something
是 JOIN
。它使用老式语法但仍然是 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
MySQL中的LEFT JOIN 和UNIONALL的联合使用