SQL多次返回相同的结果

Tra*_*tto 1 mysql sql

我对高级MySQL命令相当新,我有多个关系的数据库表.我有一个高级搜索功能,必须将关键字匹配到几个字段(大多数在Assets表中,但在User表中有一对).当我执行以下Query for 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 
Run Code Online (Sandbox Code Playgroud)

Luk*_*der 10

您的查询中有笛卡尔积.你应该加入资产和用户,例如

WHERE a.user_id = u.id
Run Code Online (Sandbox Code Playgroud)

或者像这样

FROM assets a JOIN users u ON a.user_id = u.id
Run Code Online (Sandbox Code Playgroud)

更新:您的评论显示您实际上想要"左外连接"用户表.这意味着,无论是否存在匹配用户,所有资产都在结果集中:

FROM assets a LEFT OUTER JOIN users u ON a.user_id = u.id
Run Code Online (Sandbox Code Playgroud)

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