我试图从2个表中选择'limit = 3',但它在第一个表上返回相同的行。
atable
------------------
[a_id - a_title - a_status]
[id1a - title1a - 1]
[id2a - title2a - 1]
[id3a - title3a - 1]
btable
------------------
[b_id - b_title - b_status]
[id1b - title1b - 1]
[id2b - title2b - 1]
[id3b - title3b - 1]
询问
SELECT a.a_id
, a.a_title, b.b_id
, b.b_title
FROM atable a
, btable b
WHERE a_status = 1
AND b_status = 1
LIMIT 3
结果
title1a title1b
title1a title2b
title1a title3b
但我想要这样
title1a title1b
title2a title2b
title3a title3b
我的查询中有什么问题?
编辑:经过几次尝试我选择所有行,但我如何实现此查询的限制3?我正在尝试添加限制时遇到语法错误。
SELECT a_title FROM atable LEFT JOIN btable ON (btable.b_id = atable.a_id) WHERE atable.a_status = 1 UNION SELECT b_title FROM btable RIGHT JOIN ON (btable.b_id = atable.a_id) WHERE btable.b_status = 1
您正在交叉连接两个表,这意味着数据乘以3x3。因此,您需要显示9行。
这描述了从title1a
开始获得三个结果的原因。
如果atable
和btable
有关系,你需要加入两个表,然后你就可以获得正确的结果。
您需要加入可以链接记录1-1的内容。
您当前的查询交叉将状态为1的所有表连接到状态为1的所有表。
例如,根据您的示例,在前6个字符上。
SELECT a.a_id, a.a_title, b.b_id, b.b_title
FROM atable a
JOIN btable b
ON LEFT(b.b_title, 6) = LEFT(a.a_title, 6) AND b.b_status = 1
WHERE a.a_status = 1
LIMIT 3
LIMIT与它无关。这只是告诉MySql从完整结果返回多少行的方法。通常LIMIT与ORDER BY结合使用。