为什么我得到Mysql查询的乘法值(重复行)?

时间:2015-05-01 12:00:12

标签: mysql mysqli

执行mysql查询时,我得到多个(重复)值,但实际上它应该是一个。结果它显示的预期行等于表a中存在的总行数。

SELECT a.* FROM `table1` a join `table2` b on (a.`synonyms`='Mmcs_0006');

SELECT a.* FROM `table1` a join `table2` b on (a.`synonyms`like'Mmcs_0006');

SELECT a.* FROM `table1` a, `table2` b where a.`synonyms`='Mmcs_0006';

要确保我在查询后只执行了一行,

      SELECT * FROM `table1` WHERE `table1`.`synonyms`='Mmcs_0006';

这里结果表只显示一个条目。(实际上只有一个条目。)

可能是什么原因?因为我必须多次执行此查询。所以需要一个解决方案。

1 个答案:

答案 0 :(得分:2)

您没有在表2中指定任何要加入的内容,因此您正在联接表2中的所有行(外部联接)。如果表1和表2共享一个公共密钥,则需要加入该密钥,然后添加一个where子句来限制。

类似

 SELECT a.* 
   FROM `table1` a join `table2` b on a.id = b.fk_id      
   WHERE a.`synonyms`='Mmcs_0006';

其中fk_id是对表1(a)的引用

但您似乎也没有使用表2(b)中的任何值。所以不确定为什么你需要加入/访问它..

从注释,而不是加入,您可以使用IN / Subquery)将SELECT限制为仅限于表2中匹配的行。

   SELECT * 
   FROM table1      
   WHERE synonyms IN (SELECT synonyms from table2)
   AND synonyms = 'Mmcs_0006';