我很难加入两张桌子。
我有桌子
Customer_table
---------------------------------------
| CustomerId(PK) | Firstname | Lastname |
---------------------------------------
CustomerInterest_table
----------------------------------------
| CustomerId(PK,FK) | InterestId(PK,FK) |
----------------------------------------
Interest_table
-------------------------------
| InterestId(PK) | InterestInfo |
-------------------------------
我想要做的是选择每个客户,并将福利与桌面上的FK参考相结合。
最终我想获取一个结果,其中包含从customer表中获取的客户,以及从CustomerInterest_table获取的客户兴趣。
我想建立像这样的对象
{
customerId : 'Id12345,
firstname : 'John',
lastname : 'Doe',
interests : [{interestId : 1, interestInfo : 'Apples'}]
}
我如何获取和加入表格? 非常感谢任何帮助。
答案 0 :(得分:3)
数据库设计(First Normal Form)假设该列应该是简单类型,在这种情况下它意味着没有数组。相反,您可以从多个选定的行中获取所需的内容:
SELECT customerId, firstname, lastname, interestId, InterestInfo
FROM Customer_table c
INNER JOIN CustomerInterest_table tc
ON c.customerId = tc.customerId
INNER JOIN Interest_table i
ON tc.InterestId = i.InterestId
ORDER BY customerId
最后ORDER BY
允许您强制执行行的顺序,以便同一个客户的兴趣将逐一进行。
或者,如果客户可能没有兴趣,您可以利用LEFT JOIN
(然后两列interestId,InterestInfo将为NULL)
SELECT customerId, firstname, lastname, interestId, InterestInfo
FROM Customer_table c
LEFT OUTER JOIN CustomerInterest_table tc
ON c.customerId = tc.customerId
INNER JOIN Interest_table i
ON tc.InterestId = i.InterestId
ORDER BY customerId
<强>更新强>
或者(如果您真的想要任何成本的单列中的所有内容)您可以将结果转换为XML数据类型,那么Last列将组成复杂的XML:
SELECT customerId, firstname, lastname
, [Name]
, (STUFF((SELECT CAST(', ' + interestId AS VARCHAR(MAX) + ':' + InterestInfo)
FROM Interest_table i
WHERE tc.InterestId = i.InterestId
FOR XML PATH ('')), 1, 2, '')) AS interests
FROM Customer_table c
INNER JOIN CustomerInterest_table tc
ON c.customerId = tc.customerId
(p.s. sorry语法未检查正确性)