귀하의 질문에 가입; 사용자 당 하나의 행만 보시겠습니까, 아니면 그림 하나당 행을 표시하고 U.NAME 필드에서 반복되는 값을 표시하지 않으시겠습니까? 나는 네가 두 번째를 원한다고 생각한다. 그렇지 않다면 첫 번째 질문에 대한 답이 많습니다.
반복 값을 표시할지 여부는 SQL이 실제로 설계되지 않은 표시 논리입니다. 루프에서 커서를 사용하여 결과를 행 단위로 처리 할 수 있지만 많은 성능이 저하됩니다. .NET 언어 나 Java와 같은 "현명한"프론트 엔드 언어를 사용하는 경우이 데이터를 넣은 구성을 값 비싼 방식으로 조작하여 반복되는 값을 표시하지 않도록 한 다음 UI에 마지막으로 표시합니다.
Microsoft SQL Server를 사용하고 있고 변환이 데이터 계층에서 수행되어야하는 경우 CTE (Computed Table Expression)를 사용하여 초기 쿼리를 보유한 다음 해당 테이블의 각 행에서 값을 선택하는 것이 좋습니다. CTE는 이전 행의 열이 동일한 데이터를 보유하는지 여부를 기반으로합니다. 그것은 커서보다 성능이 좋지만 다소간 지저분 할 것입니다. 관찰 :
USING CTE (Row, Name, PicID)
AS
(
SELECT ROW_NUMBER() OVER (ORDER BY U.NAME, P.PIC_ID),
U.NAME, P.PIC_ID
FROM USERS U
INNER JOIN POSTINGS P1
ON U.EMAIL_ID = P1.EMAIL_ID
INNER JOIN PICTURES P
ON P1.PIC_ID = P.PIC_ID
WHERE P.CAPTION LIKE '%car%'
ORDER BY U.NAME, P.PIC_ID
)
SELECT
CASE WHEN current.Name == previous.Name THEN '' ELSE current.Name END,
current.PicID
FROM CTE current
LEFT OUTER JOIN CTE previous
ON current.Row = previous.Row + 1
ORDER BY current.Row
위의 샘플은 TSQL에 특정한 것입니다. PL/SQL과 같은 다른 DBPL에서 작동한다는 보장은 없지만 엔터프라이즈 급 SQL 엔진의 대부분은 비슷한 점이 있다고 생각합니다.
하나의 U.NAME에서 여러 개의 P.PIC_ID 중 원하는 것을 선택 하시겠습니까? –