'Links'테이블에 대한 쿼리의 반환 된 결과에서 행당 'toTable'값에 조건부 JOIN
에서 선택된 'DisplayName'값을 나타내는 추가 열을 추가하려고합니다. 또한 때때로 'DisplayName'값은 열을 연결 한 결과입니다.행 단위로 어떤 테이블과 열을 조건부로 선택하는 방법?
내 질문은 어떻게해야합니까?
나는 별도의 쿼리를 작성하고 나는 그것을
을 할 수있는 조건 식으로 '링크'테이블의 각 항목이의 (두 테이블의 항목 쌍 사이의 링크 설명이 궁금하지만 UNION ALL
와 결합 할 수 있습니다 가능한 3 개 이상의 테이블).
링크 테이블 : 쿼리 결과
| LinkID | fromTable | fromID | toTable | toID |
| 1 | A | 1 | B | 1 |
| 2 | A | 1 | C | 2 |
| 3 | B | 1 | C | 1 |
| 4 | C | 1 | A | 1 |
내가 원하는 : WHERE 예를 들어 Links.fromTable이 = 'A'또는 Links.fromTable = 'C'
| LinkID | fromTable | fromID | toTable | toID | DisplayName |
| 1 | A | 1 | B | 1 | Some Title |
| 2 | A | 1 | C | 2 | Loud-Quack |
| 4 | C | 1 | A | 1 | Linus |
3 다른 열이있는 테이블 :
(210)Table A:
| ID | Name |
| 1 | Linus |
-
Table B:
| ID | Title |
| 1 | some title |
-
Table C:
| ID | CategoryA | CategoryB |
| 1 | Bark | Softly |
| 2 | Quack | Loud |
- 이 내가이 일을하고 어떻게 매우 유연하지 않은 UNION ALL
것입니다 : 편집 : 사실은 내가이 아래 잘못된 생각, 내가 지금 이걸보고 있어요 :
SELECT Links.*, A.Name AS DisplayName
FROM Links
JOIN A ON Links.toID = A.ID
WHERE Links.fromType IN ('A') AND Links.toType IN ('B')
UNION ALL
SELECT Links.*, CONCAT(C.CategoryB,'-',C.CategoryA) AS DisplayName
FROM Links
JOIN C ON Links.toID = C.ID
WHERE Links.fromType IN ('A') AND Links.toType IN ('C')
실제 사용 사례로 테스트했습니다. , 그리고 그것은 매력을 작동합니다. – johowie
@johowie'left join '을 사용했기 때문에 세 개의 테이블에'ID '가 없으면 여전히 존재하지만'displayname' 열에는'NULL '값이 있습니다. 그것을 깔끔하게 포맷하기 위해서는'COALESCE'를 사용할 수 있습니다. –
링크가 반복되면 두 링크를 모두 반환합니까?즉, fromType, fromID, toType 및 toID가 Links 테이블의 두 행에서 동일하면? 내 실제 링크 테이블에는 'linkType'열을 포함한 다른 열이 있습니다. 두 항목이 서로 다른 linkTypes와 두 번 연결될 수 있습니다. – johowie