在对“链接”表的查询返回的结果中,我还想添加一个额外的列,该列显示从'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