programing

MySQL 하위 쿼리에서 여러 열/필드 선택

luckcodes 2022. 10. 18. 22:08

MySQL 하위 쿼리에서 여러 열/필드 선택

기본적으로 속성 테이블과 변환 테이블이 있습니다.즉, 1개의 속성에는 다수의 변환이 있습니다.

특정 언어의 번역 레코드가 없는 경우에도 각 Atribute에 대해 번역에서 id와 값을 선택해야 합니다.여기서 join 기술을 찾을 수 없거나 join(언어 테이블을 포함하지 않음)이 기능하지 않습니다.다음은 지정된 언어로 존재하지 않는 변환으로 속성을 반환하지 않기 때문입니다.

select a.attribute, at.id, at.translation 
from attribute a left join attributeTranslation at on a.id=at.attribute
where al.language=1;

이렇게 서브쿼리를 사용하고 있습니다.이러한 문제는 파라미터가 같은 테이블에2개의 서브쿼리를 작성하는 것입니다(MySQL이 이들을 그룹화하지 않는 한 퍼포먼스 저하와 같은 느낌입니다.이것은 많은 유사한 서브쿼리를 실행할 수 있도록 하기 때문입니다).

select attribute, 
(select id from attributeTranslation where attribute=a.id and language=1),
(select translation from attributeTranslation where attribute=a.id and language=1), 
from attribute a;

하나의 쿼리에서 id와 번역을 얻을 수 있으면 좋기 때문에 컬럼을 합성하고 나중에 문자열에서 id를 가져옵니다.이것은 적어도 하나의 서브쿼리를 만들고 있지만 여전히 올바르게 보이지 않습니다.

select attribute,
(select concat(id,';',title)
    from offerAttribute_language 
    where offerAttribute=a.id and _language=1
)
from offerAttribute a

그래서 질문 부분.단일 서브쿼리에서 여러 열을 가져올 수 있는 방법이 있습니까? 아니면 두 개의 서브쿼리를 사용해야 합니까(MySQL은 이들을 그룹화할 수 있을 만큼 스마트합니다). 아니면 다음과 같은 방법으로 참여해야 합니까?

[[언어]에서 번역으로] (3개의 테이블이 서브쿼리보다 퍼포먼스가 나쁜 것 같습니다)

네, 할 수 있어요.필요한 요령은 테이블서버에서 테이블을 꺼내는 두 가지 방법이 있다는 개념입니다.한 가지 방법은...

FROM TABLE A

또 다른 방법은

FROM (SELECT col as name1, col2 as name2 FROM ...) B

select 구와 그 주변의 괄호는 테이블, 즉 가상 테이블임을 유의하십시오.

따라서 두 번째 코드 예를 사용하여 (여기서 취득하고 싶은 컬럼을 추측합니다)

SELECT a.attr, b.id, b.trans, b.lang
FROM attribute a
JOIN (
 SELECT at.id AS id, at.translation AS trans, at.language AS lang, a.attribute
 FROM attributeTranslation at
) b ON (a.id = b.attribute AND b.lang = 1)

실제 테이블은attribute이 조인에서 첫 번째 테이블입니다.이 가상 테이블은b두 번째 테이블입니다.

이 기술은 가상 테이블이 요약 테이블일 때 특히 유용합니다.

SELECT a.attr, b.id, b.trans, b.lang, c.langcount
FROM attribute a
JOIN (
 SELECT at.id AS id, at.translation AS trans, at.language AS lang, at.attribute
 FROM attributeTranslation at
) b ON (a.id = b.attribute AND b.lang = 1)
JOIN (
 SELECT count(*) AS langcount,  at.attribute
 FROM attributeTranslation at
 GROUP BY at.attribute
) c ON (a.id = c.attribute)

어떻게 되는지 보여?가상 테이블을 생성했습니다.c두 개의 열을 포함하고, 다른 두 개의 열과 결합하고, 열 중 하나를 사용하여ON절을 지정하고 나머지 절을 결과 집합의 열로 반환합니다.

언급URL : https://stackoverflow.com/questions/5686271/selecting-multiple-columns-fields-in-mysql-subquery