给MYSQL错误子查询返回多行

时间:2014-01-11 14:26:45

标签: mysql

 SELECT j. * , w. * 
    FROM tbljobseeker j
    INNER  JOIN tblworkexp w ON j.id = w.userid
    WHERE (
     w.company_name LIKE  '%xoriant%'
    OR w.company_name LIKE  '%XORIANT%'
    OR w.company_name LIKE  '%Xoriant%'
    OR w.company_name LIKE  '%Xoriant%')
     AND (
    w.tomonth !=  'till'
    )
   AND (
   w.fromyear = ( 
   SELECT w.fromyear
    FROM tblworkexp
     WHERE w.tomonth !=  'till'
    ORDER  BY w.fromyear DESC 
     LIMIT 1 , 10 ) 
    )
     ORDER  BY STR_TO_DATE( j.lastModified,  '%e-%M-%Y'  )  DESC , id DESC

请帮忙

3 个答案:

答案 0 :(得分:0)

w.fromyear =更改为w.fromyear in。这将解决问题。

要解释一下,你的限制条款LIMIT 1 , 10说从第一条记录开始给我10条记录。

使用=运算符,您只能检查单个值而不是多个值。要检查多个值,您需要使用in

in (val1,val2,val3, ..., valn)运算符

因此,帖子中的子查询应该看起来像

AND (
   w.fromyear in ( 
   SELECT w.fromyear
    FROM tblworkexp
     WHERE w.tomonth !=  'till'
    ORDER  BY w.fromyear DESC 
     LIMIT 1 , 10 ) 
    )

答案 1 :(得分:0)

您正在分配多个值,其中只有一个值。

这将有效,因为它现在将检查范围:

SELECT j. * , w. * 
    FROM tbljobseeker j
    INNER  JOIN tblworkexp w ON j.id = w.userid
    WHERE (
     w.company_name LIKE  '%xoriant%'
    OR w.company_name LIKE  '%XORIANT%'
    OR w.company_name LIKE  '%Xoriant%'
    OR w.company_name LIKE  '%Xoriant%')
     AND (
    w.tomonth !=  'till'
    )
   AND (
   w.fromyear in ( 
   SELECT w.fromyear
    FROM tblworkexp
     WHERE w.tomonth !=  'till'
    ORDER  BY w.fromyear DESC 
     LIMIT 1 , 10 ) 
    )
     ORDER  BY STR_TO_DATE( j.lastModified,  '%e-%M-%Y'  )  DESC , id DESC

答案 2 :(得分:0)

这个表达式:

   w.fromyear = ( 
   SELECT w.fromyear
    FROM tblworkexp
     WHERE w.tomonth !=  'till'
    ORDER  BY w.fromyear DESC 
     LIMIT 1 , 10 ) 
    )

没有做你期望的事。它从偏移量为1获取 10 行。因此,它返回多行。也许你打算这样做,但也许你的意思是:

limit 10, 1

或者,写得更清楚:

limit 1 offset 10

更重要的是,这个子查询看起来并不正确,因为它从不引用内部表。所有引用都是w,即外表。实际上,它始终返回外部w.fromyear,因此比较将始终为真。

我建议您使用示例数据和所需结果编写另一个问题,以获取有关SQL本身的帮助。