programing

하위 쿼리에서 열을 두 개 이상 선택할 수 없는 이유는 무엇입니까?

minecode 2023. 2. 3. 20:53
반응형

하위 쿼리에서 열을 두 개 이상 선택할 수 없는 이유는 무엇입니까?

이 질문을 계속 해봤는데

SELECT
    A.*,
    (
        SELECT
            SUM(IF(LENGTH(B.picture) > 0, 1, 0)) AS A_picture_count,
            SUM(IF(LENGTH(B.video) > 0, 1, 0)) AS A_video_count
        FROM B
        WHERE B.A_id = A.id
    )
FROM A

이 질문에 대한 답은Operand should contain 1 column(s)반면에.

SELECT
    A.*,
    (
        SELECT
            SUM(IF(LENGTH(B.picture) > 0, 1, 0)) AS A_picture_count
        FROM B
        WHERE B.A_id = A.id
    )
FROM A

완벽하게 동작합니다.MariaDB는 왜 1컬럼 이상의 서브쿼리를 허용하지 않는가?내가 뭘 빼놓았나요?


질문(MySQL - Operand에는 1개의 열이 포함되어 있어야 합니다)에서 알 수 있듯이,

너는 아마 내가 이 길로 가야 한다고 대답할 것이다.

SELECT t1.*, sq.*
FROM table1 t1,
   (SELECT a,b,c FROM table2 ...) sq
WHERE ...

또는 join을 사용합니다(하지만 제 질문은 훨씬 더 복잡하며 저의 많은 SUM과 Counts는 제 GROUP BY와 많은 문제를 일으킵니다).

제 질문은 '어떻게'보다는 '왜'에 관한 것입니다.


최종 솔루션(최적이 아님):

SELECT
    A.*,
    (
        SELECT
            SUM(IF(LENGTH(B.picture) > 0, 1, 0)) AS A_picture_count,
        FROM B
        WHERE B.A_id = A.id
    )
    (
        SELECT
            SUM(IF(LENGTH(B.video) > 0, 1, 0)) AS A_video_count
        FROM B
        WHERE B.A_id = A.id
    )
FROM A

터무니없는 해킹은 두 값을 하나의 변수로 코드화하는 것입니다.어느 쪽도 1000을 넘을 수 없는 경우:

SELECT
    A.*,
    (
        SELECT
         1000 * SUM(IF(LENGTH(B.picture) > 0, 1, 0)) +
                SUM(IF(LENGTH(B.video) > 0, 1, 0)) AS A_pv_count
        FROM B
        WHERE B.A_id = A.id
    )
FROM A

/ 1000 및 % 1000을 사용하여 컴포넌트를 반환할 수 있습니다.

SELECT floor(A_pv_count / 1000) AS A_picture_count,
            (A_pv_count % 1000) AS A_video_count
FROM
(SELECT
    A.*,
    (
        SELECT
         1000 * SUM(IF(LENGTH(B.picture) > 0, 1, 0)) +
                SUM(IF(LENGTH(B.video) > 0, 1, 0)) AS A_pv_count
        FROM B
        WHERE B.A_id = A.id
    )
 FROM A) AS AW

[ IMO No Database ]에서 2개의 컬럼을 선택할 수 있습니다.( )이런 거죠.할 수 없는 것은 분명하다select col1, (col2_ok), (multi_columns_HOW_ON_EARTH?)

하나의 솔루션에서는 다음과 같은 tmp 테이블을 사용해야 합니다(검색되지만 MariaDB는 지원하지 않음).cte):

select A.*, tmp.A_picture_count, tmp.A_video_count
from A
inner join (SELECT A.id,
                SUM(IF(LENGTH(B.picture) > 0, 1, 0)) AS A_picture_count,
                SUM(IF(LENGTH(B.video) > 0, 1, 0)) AS A_video_count
            FROM A
            inner join B
            on B.A_id = A.id
            group by A.id
            ) tmp
on A.id = tmp.id;

언급URL : https://stackoverflow.com/questions/37139405/why-i-cant-select-more-than-one-column-in-my-subquery

반응형