首页 > 解决方案 > 使用 Where 和 Limit 返回相同行的多个表选择

问题描述

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

标签: mysql

解决方案


您正在交叉连接两个表,这意味着数据乘以3x3。因此,您需要期望显示 9 行。

这描述了以 开头的三个结果的原因title1a

如果atable并且btable有关系,您需要加入两个表,然后您可以获得正确的结果。


推荐阅读