내가 만드는 시스템에서 작업하는 동안 프로젝트에서 다음 쿼리를 사용하려고했습니다.
SELECT
topics.id,
topics.name,
topics.post_count,
topics.view_count,
COUNT( posts.solved_post ) AS solved_post,
(SELECT users.username AS posted_by,
users.id AS posted_by_id
FROM users
WHERE users.id = posts.posted_by)
FROM topics
LEFT OUTER JOIN posts ON posts.topic_id = topics.id
WHERE topics.cat_id = :cat
GROUP BY topics.id
“: cat”은 PDO를 사용할 때 내 PHP 코드에 묶여 있습니다. 2는 “: cat”에 유효한 값입니다.
이 쿼리는 “# 1241-피연산자는 1 개의 열을 포함해야합니다.”라는 오류를 표시합니다.
나를 괴롭히는 것은이 쿼리가 아무 문제없이 작동 할 것이라고 생각한다는 것입니다. 열을 선택한 다음 다른 테이블에서 두 개를 더 선택하고 거기에서 계속합니다. 나는 문제가 무엇인지 이해할 수 없습니다.
이것에 대한 간단한 수정 또는 내 쿼리를 작성하는 다른 방법이 있습니까?
답변
하위 쿼리가 두 개의 열을 선택하는 동안 하나의 열을 투영하는 데 사용합니다 (외부 SELECT
절의 일부로 ). 이 컨텍스트에서는 이러한 쿼리에서 하나의 열만 선택할 수 있습니다.
users
대신 테이블에 조인하는 것을 고려하십시오 . 이렇게하면 원하는 열을 선택할 때 더 많은 유연성을 얻을 수 있습니다 users
.
SELECT
topics.id,
topics.name,
topics.post_count,
topics.view_count,
COUNT( posts.solved_post ) AS solved_post,
users.username AS posted_by,
users.id AS posted_by_id
FROM topics
LEFT OUTER JOIN posts ON posts.topic_id = topics.id
LEFT OUTER JOIN users ON users.id = posts.posted_by
WHERE topics.cat_id = :cat
GROUP BY topics.id
답변
실수로 대신 쉼표를 사용하는 경우이 오류가 발생할 수 있습니다 AND
에서 ON
(A)의 절을 JOIN
:
JOIN joined_table ON (joined_table.column = table.column, joined_table.column2 = table.column2)
^
should be AND, not a comma
답변
이 오류는 절 에서 =
대신 실수로 사용하는 경우에도 발생할 수 있습니다 .IN
WHERE
예 :
WHERE product_id = (1,2,3);
답변
COUNT( posts.solved_post ) AS solved_post,
(SELECT users.username AS posted_by,
users.id AS posted_by_id
FROM users
WHERE users.id = posts.posted_by)
글쎄, 당신은 이와 같은 하나의 하위 쿼리에서 여러 열을 가져올 수 없습니다. 다행히 두 번째 열은 이미 posts.posted_by
! 그래서:
SELECT
topics.id,
topics.name,
topics.post_count,
topics.view_count,
posts.posted_by
COUNT( posts.solved_post ) AS solved_post,
(SELECT users.username AS posted_by_username
FROM users
WHERE users.id = posts.posted_by)
...
답변
제 경우 문제는 실수로 괄호로 열 선택을 둘러싼 것입니다.
SELECT (p.column1, p.colum2, p.column3) FROM table1 p where id = 1;
그리고 다음과 같아야합니다.
SELECT p.column1, p.colum2, p.column3 FROM table1 p where id = 1;
어리석은 것처럼 들리지만 이로 인해이 오류가 발생했으며이를 파악하는 데 시간이 좀 걸렸습니다.
답변
이 오류가 발생할 수있는 또 다른 위치는 문자열 외부에 쉼표가있는 값을 할당하는 것입니다. 예를 들면 :
SET totalvalue = (IFNULL(i.subtotal,0) + IFNULL(i.tax,0),0)
답변
이 오류는 실수로 if
함수 이름을 놓친 경우에도 발생할 수 있습니다 .
예를 들면 :
set v_filter_value = 100;
select
f_id,
f_sale_value
from
t_seller
where
f_id = 5
and (v_filter_value <> 0, f_sale_value = v_filter_value, true);
함수 에 if 를 넣는 것을 놓쳤을 때이 문제가 발생했습니다 if
!