Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 选择带有或的语句问题_Mysql_Sql_Select_Filter - Fatal编程技术网

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;