2017-11-25 1 views
-3

comment, admin, user라는 테이블이 있습니다.이름이 행 결과에있는 테이블에 가입하십시오.

코멘트 :

body    userType   userId 
-------------------------------------------- 
comment1   admin    1 
comment2   user    2 

관리자 :

id    title 
----------------------- 
1    amir   
2    farhad 

사용자 :

id    title 
----------------------- 
1    kazem   
2    ali 

나는 그것이 테이블처럼 하나 개의 쿼리의에서 주석과 userTypes '타이틀을 얻으려면 :

SELECT u.title, c.body FROM comment c, c.userType u 

하지만 작동하지 않습니다!

+1

세 테이블 모두의 구조를 제공하십시오. – Abhishek

+1

해당 쿼리가 유효한 SQL이 아닙니다. 위의 의견에 따라, 세 테이블 구조를 모두 제공하십시오 – SEarle1986

+0

@Abhishek 편집! –

답변

2

옵션이 마음에 와서 몇 : 노동 조합을 사용하여

는 :

SELECT title, body FROM comment c JOIN user u on c.userId = u.id and userType = 'user' 
UNION 
SELECT title, body FROM comment c JOIN admin u on c.userId = u.id and userType = 'admin' 

왼쪽을 사용하여 조인

SELECT 
    COALESCE(u.title, a.title) as title, 
    c.body 
FROM comment c 
    LEFT JOIN user u on c.userId = u.id and userType = 'user' 
    LEFT JOIN user a on a.userId = u.id and userType = 'admin' 
WHERE COALESCE(u.title, a.title) is not null; 

이 ANSI SQL COALESCE을 사용합니다. T-SQL (MS SQL)을 사용하는 경우 대신 ISNULL을 사용해야합니다.

더 일반적으로,이 the "Concrete Table Inheritance" pattern의 경우이고, 열은 userType판별 불린다.

+0

만약 내가 코멘트에 대한 id 열이 있다면, 어떻게 연합에 대한 c.id 명령을 추가 할 수 있습니까? –

+0

나는 당신이'ORDER BY c.id'를 질의에 추가 할 수 있다고 믿지만 그것은'union '과 함께 작동하지 않을 수도있다. 'SELECT' 절에 별칭이있는 주석 ID를 포함하고 그 별칭으로 정렬해야 할 수도 있습니다. 예 : '제목, 본문, c.id를 comment_id로 선택하십시오 ... ORDER BY comment_id' –

관련 문제