2014-03-01 8 views
1

많은 게시물을 읽었지 만 작성해야하는 오류 및 쿼리는 이해할 수 없습니다."하위 쿼리는 1 행 이상을 반환합니다"오류

은 내가

SELECT * FROM `posters` 
WHERE title LIKE '%it%' 
AND id = (
    SELECT poster_id FROM `poster_likes` 
    WHERE action=1 
    GROUP BY poster_id 
    HAVING COUNT(*) < 100 
) 

하위 쿼리 반환 둘 이상의 행처럼 1000 개 이상의처럼이 그 poster_id를 원한다.

누구든지 나를 위해이 쿼리를 작성할 수 있습니다. 미리 감사드립니다. 당신이 where id =(subquery)를 사용하는

다음
SELECT * FROM `posters` 
WHERE title LIKE '%it%' 
AND id IN (
    SELECT poster_id FROM `poster_likes` 
    WHERE action=1 
    GROUP BY poster_id 
    HAVING COUNT(*) < 100 
) 

답변

2

당신은 아마 = 대신 IN()를 사용하는 것을 의미

변화

where id =(subquery) 

을하려면

where id in (subquery) 
+0

또한 아마 ... 그 작업이 .... – trogdor

+0

감사를 원한다 모두 –

0

하지만 서브 쿼리는 하나 개 이상의 값 때문에 반환 :

+0

MySQL이 TOP' –

+0

이는 최고 일 poster_id을 반환 할 수 있습니다'가 없습니다 ...하지만 내가 원하는'COUNT (*)> 1000' –

0

하위 쿼리가 두 개 이상의 행을 반환합니다. 조건은 id = (more than one thing)이고 sql은이를 취소 할 수 없습니다. in 조항

SELECT * FROM `posters` 
WHERE title LIKE '%it%' 
AND id IN (-- = changed to IN 
    SELECT poster_id FROM `poster_likes` 
    WHERE action=1 
    GROUP BY poster_id 
    HAVING COUNT(*) < 100 
) 

을 사용하거나 첫 번째 결과 만 선택할 수 있습니다.

-1
CREATE PROCEDURE `spLeaves`(IN LId BIGINT, IN EIds LONG VARCHAR, IN McIds LONG VARCHAR, 
    IN DIds LONG VARCHAR, IN SdIds LONG VARCHAR, IN ObIds LONG VARCHAR, 
    IN fromdate VARCHAR(15), IN todate VARCHAR(15), IN stats VARCHAR(25)) 
BEGIN 
SELECT 
    levs.LeaveId AS id, 
    levs.EmployeeId, levs.REmployeeId, 
    CONCAT('L', LPAD(IFNULL(levs.LeaveId,0), 5, '0')) AS LeaveNo, 
    ldateformat(levs.RequestDate) AS RDate, 
    sdateformat(levs.StartDate) AS SDate, 
    sdateformat(levs.EndDate) AS EDate, 
    CONCAT(sdateformat(levs.StartDate),' to ',sdateformat(levs.EndDate)) AS Period, 
    CONCAT(levstyp.LeaveTypeName,' Leave') AS title, 
    levs.*, levstyp.LeaveTypeName AS Nature, spc.SpecialLeaveName, 
    CONCAT(emp.FirstName,' ',emp.LastName) AS EmployeeName, emp.LeaveCategoryId, 
    CONCAT(emp2.FirstName,' ',emp2.LastName) AS LeaveBy, 
    CASE levs.IsMedicalCertificate WHEN 1 THEN "Yes" ELSE "No" END AS Medical, 
    (SELECT CONCAT(emp.FirstName,' ',emp.LastName) AS EmployeeName FROM tblemployees AS emp INNER JOIN tblapproveleaves AS apr ON emp.EmployeeId = apr.EmployeeId WHERE apr.LeaveId = levs.LeaveId ORDER BY LeaveApproveId DESC LIMIT 1) AS ApprovedBy, 
    (SELECT ldateformat(apr.Date) AS ADate FROM tblemployees AS emp INNER JOIN tblapproveleaves AS apr ON emp.EmployeeId = apr.EmployeeId WHERE apr.LeaveId = levs.LeaveId ORDER BY LeaveApproveId DESC LIMIT 1) AS ApprovedDate, 
    (SELECT apr.GrantedDays FROM tblemployees AS emp INNER JOIN tblapproveleaves AS apr ON emp.EmployeeId = apr.EmployeeId WHERE apr.LeaveId = levs.LeaveId ORDER BY LeaveApproveId DESC LIMIT 1) AS GrantedDays, 
    (SELECT CONCAT(emp.FirstName,' ',emp.LastName) AS EmployeeName FROM tblemployees AS emp INNER JOIN tblleavescancellation AS cls ON emp.EmployeeId = cls.EmployeeId WHERE cls.LeaveId = levs.LeaveId ORDER BY LeaveCancellationId DESC LIMIT 1) AS CancelledBy, 
    (SELECT ldateformat(cls.Date) AS CDate FROM tblemployees AS emp INNER JOIN tblleavescancellation AS cls ON emp.EmployeeId = cls.EmployeeId WHERE cls.LeaveId = levs.LeaveId ORDER BY LeaveCancellationId DESC LIMIT 1) AS CancelledDate 
FROM 
    tblleaves AS levs INNER JOIN 
    tblleavestypes AS levstyp ON levs.LeaveTypeId = levstyp.LeaveTypeId LEFT JOIN 
    tblspecialleaves AS spc ON levs.SpecialLeaveId = spc.SpecialLeaveId INNER JOIN 
    tblemployees AS emp ON levs.EmployeeId = emp.EmployeeId LEFT JOIN 
    tblemployees AS emp2 ON levs.REmployeeId = emp2.EmployeeId 

WHERE 
    (levs.LeaveId = LId OR LId = 0) 
AND 
    (FIND_IN_SET(levs.EmployeeId, EIds) OR EIds IS NULL) 
AND 
    (FIND_IN_SET(emp.LeaveCategoryId, McIds) OR McIds IS NULL) 
AND 
    (DATE_FORMAT(levs.RequestDate,'%Y-%m-%d') BETWEEN DATE_FORMAT(fromdate,'%Y-%m-%d') AND DATE_FORMAT(todate,'%Y-%m-%d') OR fromdate IS NULL) 
AND 
    (levs.Status = stats OR stats IS NULL) 
ORDER BY 
    levs.LeaveId DESC; 
END 
+0

이것은 질문과 전혀 관련이 없으며 ... 결코 대답하지 않습니다 ... – Ben

관련 문제