我试图从'limit = 3'的2个表中进行选择,但它在第一个表上返回相同的行。
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
答案 0 :(得分:0)
您是横接合两个表,其平均数据被乘以的 3×3 即可。结果,您需要期望显示9行。
这描述了从title1a
开始获得三个结果的原因。
如果atable
和btable
有关系,则需要同时连接两个表,然后可以获得正确的结果。
答案 1 :(得分:0)
您需要加入可以链接记录1-1的内容。
您当前的查询将状态1的所有able与状态1的所有btable交叉连接。
例如,根据您的示例,前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结合使用。