具有where和limit的多表选择返回相同的行

时间:2019-01-30 22:33:58

标签: mysql

我试图从'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

2 个答案:

答案 0 :(得分:0)

您是横接合两个表,其平均数据被乘以的 3×3 即可。结果,您需要期望显示9行。

这描述了从title1a开始获得三个结果的原因。

如果atablebtable有关系,则需要同时连接两个表,然后可以获得正确的结果。

答案 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结合使用。