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
请帮忙
答案 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本身的帮助。