在對「鏈接」表的查詢返回的結果中,我還想添加一個額外的列,該列顯示從'012表'中選擇的'DisplayName'值,條件是每行'toTable'的值。另外有時候,'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' OR 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不同色譜柱的表格:
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