执行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';
这里结果表只显示一个条目。(实际上只有一个条目。)
可能是什么原因?因为我必须多次执行此查询。所以需要一个解决方案。
答案 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';