2013-10-03 2 views
0

에 1 열을 포함해야합니다. 두 번째 필드 "e.occured_at"를 삽입하려고하면이 오류가 발생합니다. 하위 쿼리에서이 테이블의 필드를 선택하고 싶습니다. 고쳐?피연산자는 하위 쿼리

SELECT DISTINCT (
inbox_msg.id_conversation 
), users.name, users.surname, users.username, n. * , image_upload.name_image, (

SELECT e.message, e.occured_at 
FROM inbox_msg e 
WHERE e.id_user = inbox_msg.id_user 
ORDER BY occured_at DESC 
LIMIT 1 
) AS last_msg 
FROM (

SELECT * 
FROM inbox_join 
WHERE (
id_user =1 || id_user_2 =1 
) 
)n 
INNER JOIN inbox_msg ON n.id_conversation = inbox_msg.id_conversation 
INNER JOIN users ON users.id = inbox_msg.id_user 
INNER JOIN image_upload ON image_upload.id_image = users.profile_image 
WHERE inbox_msg.id_user <>1 
ORDER BY n.occured_at DESC 
+1

하위 쿼리는 쿼리의 한 필드를 나타내며 여러 필드가 될 수 있다고 생각하지 않습니다. 가장 쉬운 방법은 e.message에 하나, e.occured_at에 하나씩 두 개의 하위 쿼리를 포함시키는 것입니다. 테이블 inbox_msg가 이미 FROM 절에 있지만 데이터 구조를 알지 못하기 때문에 하위 쿼리를 피할 수있는 방법이있을 수 있습니다. – gregory

답변

1

귀하의 하위 쿼리 별칭을 만들기 위해 하나 개의 컬럼을 필요로하고 두 개의 열 중 하나 솔루션을 제공 한 열을 CONCAT하는

다른 솔루션

(
SELECT e.message 
FROM inbox_msg e 
WHERE e.id_user = inbox_msg.id_user 
ORDER BY occured_at DESC 
LIMIT 1 
) AS last_msg, 
(
SELECT e.occured_at 
FROM inbox_msg e 
WHERE e.id_user = inbox_msg.id_user 
ORDER BY occured_at DESC 
LIMIT 1 
) AS last_msg_time 
처럼 각 열 두 번 하위 쿼리를하는 것입니다

(
SELECT CONCAT(e.message, ' At ', e.occured_at) 
FROM inbox_msg e 
WHERE e.id_user = inbox_msg.id_user 
ORDER BY occured_at DESC 
LIMIT 1 
) AS last_msg