MySQL-피연산자는 1 개의 열을 포함해야합니다.
내가 만드는 시스템에서 작업하는 동안 프로젝트에서 다음 쿼리를 사용하려고했습니다.
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
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)
...
이 오류는 절 에서 =
대신 실수로 사용하는 경우에도 발생할 수 있습니다 .IN
WHERE
예 :
WHERE product_id = (1,2,3);
이 오류가 발생할 수있는 또 다른 위치는 문자열 외부에 쉼표가있는 값을 할당하는 것입니다. 예를 들면 :
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);
Got this problem when I missed putting if in the if
function!
참고URL : https://stackoverflow.com/questions/14046838/mysql-operand-should-contain-1-columns
'developer tip' 카테고리의 다른 글
Python : 런타임에 메서드 및 속성 변경 (0) | 2020.10.28 |
---|---|
벡터의 C ++ 11 emplace_back (0) | 2020.10.27 |
Angular에서 $ location.path를 $ http.post 성공 콜백으로 리디렉션하는 방법 (0) | 2020.10.27 |
: after 요소가 다음 줄로 줄 바꿈되지 않도록 방지 (0) | 2020.10.27 |
단어 목록으로 grep하는 방법 (0) | 2020.10.27 |