복붙노트

[SQL] MySQL의 - 피연산자 1 열 (들)을 포함해야

SQL

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

"고양이는"나는 PDO를 사용하고 나의 PHP 코드에 의해 바인딩됩니다. "고양이"2에 대한 유효한 값입니다.

나에게 오류 제공하지만 그 쿼리 : "# 1241 - 피연산자가 1 열 (들)을 포함해야"

어떤 날 젊고 아름다운 것은 내가이 쿼리는 아무 문제가 작동하지 않을 것이라고 생각한다는 것입니다. 다음 다른 테이블에서 두 가지 이상을 선택, 열을 선택하고 거기에서 계속. 난 그냥 문제가 무엇인지 알아낼 수 없습니다.

이에 대한 간단한 수정, 또는 내 쿼리를 작성하는 또 다른 방법이 있습니까?

해결법

  1. ==============================

    1.당신은 (외부 SELECT 절의 일환으로) 하나의 열을 프로젝트에 사용하는 동안 귀하의 하위 쿼리는 두 개의 열을 선택하는 것입니다. 당신은이 상황에서 같은 쿼리에서 하나의 열을 선택할 수 있습니다.

    당신은 (외부 SELECT 절의 일환으로) 하나의 열을 프로젝트에 사용하는 동안 귀하의 하위 쿼리는 두 개의 열을 선택하는 것입니다. 당신은이 상황에서 같은 쿼리에서 하나의 열을 선택할 수 있습니다.

    대신 사용자 테이블에 합류 고려; 당신이 사용자로부터 원하는 열을 선택할 때 이것은 당신에게 더 많은 유연성을 제공 할 것입니다.

    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
    
  2. ==============================

    2.실수로 대신하고 조인의 ON 절에 쉼표를 사용하는 경우이 오류가 발생할 수 있습니다 :

    실수로 대신하고 조인의 ON 절에 쉼표를 사용하는 경우이 오류가 발생할 수 있습니다 :

    JOIN joined_table ON (joined_table.column = table.column, joined_table.column2 = table.column2)
                                                            ^
                                                 should be AND, not a comma
    
  3. ==============================

    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)
    ...
    
  4. ==============================

    4.실수로 WHERE 절에 = 대신 IN으로 사용하는 경우이 오류가 발생할 수 있습니다 :

    실수로 WHERE 절에 = 대신 IN으로 사용하는 경우이 오류가 발생할 수 있습니다 :

    예를 들어 :

    WHERE product_id = (1,2,3);
    
  5. ==============================

    5.이 오류가 일어날 수있는 또 다른 장소는 문자열의 쉼표 외부에있는 값을 할당한다. 예를 들면 :

    이 오류가 일어날 수있는 또 다른 장소는 문자열의 쉼표 외부에있는 값을 할당한다. 예를 들면 :

    SET totalvalue = (IFNULL(i.subtotal,0) + IFNULL(i.tax,0),0)
    
  6. ==============================

    6.실수로 함수 이름 경우 놓칠 경우에도이 오류가 발생할 수 있습니다.

    실수로 함수 이름 경우 놓칠 경우에도이 오류가 발생할 수 있습니다.

    예를 들어 :

    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);
    

    나는 퍼팅 놓친 때이 문제를 얻은 경우 기능의 경우!

  7. ==============================

    7.

    (SELECT users.username AS posted_by,
    users.id AS posted_by_id
    FROM users
    WHERE users.id = posts.posted_by)
    

    하위 쿼리를 사용하면 여기에 있지만 하위 쿼리는 하나의 컬럼을 반환해야합니다. 그것은 것 쇼 오류 그렇지 않으면를 분리합니다.

  8. from https://stackoverflow.com/questions/14046838/mysql-operand-should-contain-1-columns by cc-by-sa and MIT license