SELECT的SELECT语句问题

时间:2012-08-08 16:14:35

标签: mysql sql select filter

我正在尝试使用下一个语句进行过滤查询:

SELECT * FROM user_jobs,users WHERE user_jobs.job_title LIKE "%some_keyword%" **OR** user_jobs.job_title LIKE "%another_keyword%" AND user.id=user_jobs.userid

规格:users.id是PK,user_jobs.userid是fK到users.id

我正在尝试过滤用户以获取具有与指定值相似的值的用户。当我运行它时,我得到一个非常长的循环,最后是一个包含重复项的大量用户列表。 (例如,我只有300个用户,查询显示超过3000个结果)

我做错了什么,拜托?

提前致谢!

4 个答案:

答案 0 :(得分:3)

AND takes precedence over OR;使用括号来达到预期的效果。

SELECT * FROM user_jobs, users
WHERE
    (user_jobs.job_title LIKE "%some_keyword%"
  OR user_jobs.job_title LIKE "%another_keyword%")
AND users.id = user_jobs.userid

答案 1 :(得分:1)

您需要在该查询中使用括号。

SELECT * FROM user_jobs,users WHERE user.id=user_jobs.userid
AND (user_jobs.job_title LIKE "%some_keyword%"
OR user_jobs.job_title LIKE "%another_keyword%")

答案 2 :(得分:0)

首先,AND运算符在这种情况下保持优先权。像这样隔离你的逻辑:

SELECT * FROM user_jobs,users WHERE (user_jobs.job_title LIKE "%some_keyword%" OR user_jobs.job_title LIKE "%another_keyword%") AND user.id=user_jobs.userid

其次,请勿使用SELECT * FROM ...。这会选择所有数据,增加网络开销,并占用更多时间在服务器上传输所有数据。

参考http://dev.mysql.com/doc/refman/5.0/en/func-op-summary-ref.html

答案 3 :(得分:0)

即使您的表包含300条记录,它也会产生大约3000条记录,因为您从两个表中选择了列但未在查询中给出任何连接条件,因此它将CROSS JOIN两个表。

并且为了找到`JOB_TITLE模式,你也可以使用正则表达式

SELECT * FROM USER_JOBS T1,USERS T2 WHERE REGEXP_LIKE(USER_JOBS.JOB_TITLE ,'SOME_KEYWORD|OTHER_KEYWORD') AND T2.ID=T1.USERID;