我们可以在sql查询中多次使用相同的列名

时间:2015-01-21 09:21:01

标签: php mysql

  

我希望在相同的查询示例中使用相同的列多次6次   查询如何获得结果?

            SELECT J.ID , J.U_POST_ID,
            J.TITLE,J.CREATION_DATE,J.STATUS,
            R.FIRST_NAME, R.LAST_NAME,R.CLINICAL_CLINIC_NAME,
            J.REQUIREMENT,J.STATE,J.CITY,J.DESCRIPTION,J.CALL_DUR,J.USER_ID
            FROM  
            df_job_meta M LEFT OUTER JOIN df_job_post J ON
            M.JOB_ID = J.ID
            LEFT OUTER JOIN df_register_users R ON 
            R.ID = J.USER_ID
            WHERE
            J.STATUS='ACTIVE'  AND R.OCCUPATION !='student' AND  M.VALUE IN ('Clinical')  AND M.VALUE IN ('Full Time')   group  BY J.ID DESC

我的表格结构就像这样

  JOB_ID   |META_KEY       | VALUE
1          |  work_hour    | Full Time
1          | profile       | Clinical
1          | pay_scale     | Sharing

2 个答案:

答案 0 :(得分:3)

我认为你有这个麻烦:

在您的查询中,您添加了一个WHERE子句,如下所示:

M.VALUE IN ('Clinical') AND M.VALUE IN ('Full Time') 

此条件始终为FALSE。

你必须在以下情况下解决你的状况:

M.VALUE IN ('Clinical', 'Full Time')

关于使用列倍数:如果要在SELECT字段列表中添加同一列,则必须使用如下别名:

SELECT J.id as ID1, J.id as ID2 and so on...

如果你想在WHERE条件中使用相同的列,那么没问题,但要注意你使用的关系运算符

修改

通过一个例子进一步解释M.VALUE:

假设您有一个名为Person的表。

您有一个名为sex的列,其中您有关于FEMAIL的值F和关于MALE的M。

所以如果你写这个查询:

SELECT * FROM Person WHERE sex = 'F' and sex = 'M'

你有0行受影响

但是如果你写这个查询:

SELECT * FROM Person WHERE sex IN ('F', 'M') 

或同等的

SELECT * FROM Person WHERE sex = 'F' or sex = 'M'

你的表中有所有行

答案 1 :(得分:1)

由于您在使用IN函数时只有一个值,您可以用equals替换它,并使用或使用括号 - group by也不是用于orderby的ASC或DESC - 尝试:

SELECT J.ID , J.U_POST_ID,
            J.TITLE,J.CREATION_DATE,J.STATUS,
            R.FIRST_NAME, R.LAST_NAME,R.CLINICAL_CLINIC_NAME,
            J.REQUIREMENT,J.STATE,J.CITY,J.DESCRIPTION,J.CALL_DUR,J.USER_ID
            FROM  
            df_job_meta M LEFT OUTER JOIN df_job_post J ON
            M.JOB_ID = J.ID
            LEFT OUTER JOIN df_register_users R ON 
            R.ID = J.USER_ID
            WHERE
            J.STATUS='ACTIVE'  AND R.OCCUPATION !='student' AND  (M.VALUE = 'Clinical'  OR M.VALUE = 'Full Time' group  BY J.ID

或者,如果您真的在寻找这两个值,那么就这样做:

SELECT J.ID , J.U_POST_ID,
            J.TITLE,J.CREATION_DATE,J.STATUS,
            R.FIRST_NAME, R.LAST_NAME,R.CLINICAL_CLINIC_NAME,
            J.REQUIREMENT,J.STATE,J.CITY,J.DESCRIPTION,J.CALL_DUR,J.USER_ID
            FROM  
            df_job_meta M LEFT OUTER JOIN df_job_post J ON
            M.JOB_ID = J.ID
            LEFT OUTER JOIN df_register_users R ON 
            R.ID = J.USER_ID
            WHERE
            J.STATUS='ACTIVE'  AND R.OCCUPATION !='student' AND  M.VALUE IN ('Clinical','Full Time') group  BY J.ID

您可以将Mysql IN函数想象为PHP的in_array函数。