Mysql 选择带有或的语句问题
我正在尝试使用下一条语句执行筛选查询:Mysql 选择带有或的语句问题,mysql,sql,select,filter,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 to users.id 我正在尝试筛选用户,以获得与指定值相似的用户。
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 to users.id
我正在尝试筛选用户,以获得与指定值相似的用户。当我运行它时,我得到一个很长的循环,最后是一个包含重复用户的大列表。(例如,我只有300个用户,查询结果超过3000个)
请问我做错了什么
提前谢谢 ;使用括号以获得所需的结果
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
);使用括号以获得所需的结果
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
您需要在该查询中使用括号
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%")
您需要在该查询中使用括号
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%")
首先,在这种情况下,
和
运算符具有优先权。像这样孤立你的逻辑:
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…
。这会选择所有数据,增加网络开销,并占用更多时间在服务器上传输所有数据
参考:首先,在这种情况下,
和
运算符优先。像这样孤立你的逻辑:
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…
。这会选择所有数据,增加网络开销,并占用更多时间在服务器上传输所有数据
Reference:即使您的表包含300条记录,它也会产生大约3000条记录,因为您正在从两个表中选择列,但在查询中没有给出任何联接条件,因此它将
交叉联接两个表
为了找到“工作”头衔模式,你也可以使用正则表达式
SELECT * FROM USER_JOBS T1,USERS T2 WHERE REGEXP_LIKE(USER_JOBS.JOB_TITLE ,'SOME_KEYWORD|OTHER_KEYWORD') AND T2.ID=T1.USERID;
即使您的表包含300条记录,它也会产生大约3000条记录,因为您正在从两个表中选择列,但在查询中没有给出任何连接条件,因此它将交叉连接这两个表
为了找到“工作”头衔模式,你也可以使用正则表达式
SELECT * FROM USER_JOBS T1,USERS T2 WHERE REGEXP_LIKE(USER_JOBS.JOB_TITLE ,'SOME_KEYWORD|OTHER_KEYWORD') AND T2.ID=T1.USERID;