mysql - SQL多次返回相同的结果

标签 mysql sql

我对高级 MySQL 命令还很陌生,我有多个关系的数据库表。我有一个高级搜索功能,必须将关键字与几个字段匹配(大多数在 Assets 表中,但在用户表中有几个)。当我为 desk 执行以下查询时,它多次返回同一行,而它应该执行一次。

 SELECT 
   a.id, a.asset_id, a.name, a.serial_number, a.category_id, a.status_id, a.user_id, a.location_id 
 FROM 
   assets a, users u 
 WHERE 
  (a.asset_ID LIKE '%desk%' OR a.name LIKE '%desk%' OR (u.first_name LIKE '%desk%' OR u.last_name LIKE '%desk%')) AND 
  a.serial_number LIKE '%%' AND 
  a.category_id='2' 
 LIMIT 25 OFFSET 5450 

最佳答案

你有一个 cartesian product在您的查询中。您应该 JOIN Assets 和用户,例如与

WHERE a.user_id = u.id

或者像这样

FROM assets a JOIN users u ON a.user_id = u.id

更新:您的评论表明您实际上想要“左外连接”用户表。这意味着,无论是否存在匹配的用户,所有 Assets 都在结果集中:

FROM assets a LEFT OUTER JOIN users u ON a.user_id = u.id

在此处阅读有关连接表的更多信息:http://dev.mysql.com/doc/refman/5.5/en/join.html

关于mysql - SQL多次返回相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6694906/

相关文章:

mysql - Solr DataImportHandler 与地理字段相关的问题

python - 使用python代码将MySql列中的 "NAN"值转换为NULL

sql - 您可以为 LIKE 运算符定义自定义行为吗?

sql - oracle提高查询性能

python - 尝试通过 pandas : Can't load plugin: sqlalchemy. 方言连接到 ibm db2 数据库时出错:ibm_db_sa

mysql - 将 ` 与 ( 组合时,正则表达式的行为会令人困惑

MySQL 列名

MySQL在从端基于行的主从复制中触发事件

mysql - 编程新手 : Why can I not alias an inline view in Oracle SQL?

sql - 当数据库兼容性级别设置为 SQL Server 2008 时,如何在 SSIS OLE DB 源 SQL 命令中使用 STRING_SPLIT?