好的,我有三张桌子。父表是Listings
和两个子表Images
和Tags
。
这是数据库架构
列表
ListingID (PK) Title Images Tags
1 Fruits 1 1
2 Furniture 0 0
3 Electronics 0 0
图片表
ImageID ListingID (FK) ImageName
1 1 fruits.png
2 1 fruits_2.png
3 1 fruits_3.png
代码
TagID ListingID (FK) Tag
1 1 apple
2 1 banana
3 1 melon
所以我需要通过listingid从列表中选择,如果它有图像连接图像表,如果它有标签表。
作为输出我想收到
例如,我选择清单ID = 1
Title Images Tags
---------------------------------------------------------------------------
Fruits fruits.png|fruits_2.png|fruits_3.png apple|banana|melon
请记住,Listing
表每天有100K次点击。所以我们需要消除行锁定
如果您更好地了解如何从这3个表格中选择,请与我分享示例。
答案 0 :(得分:3)
您也可以
SELECT l.Title, i.ImageName, t.Tag FROM
Listings l
LEFT OUTER JOIN Images i ON l.ListingID = i.ListingID
LEFT OUTER JOIN Tags t ON l.ListingID = t.ListingID
WHERE l.ListingID = 1
您必须按下生成结果集,但在我的工作中,我更喜欢将纯SQL与应用程序逻辑分开。
答案 1 :(得分:2)
试
select p.Title,
stuff((select ', ' + i.ImageName from Images i where i.ListingID = p.ListingID for xml path('')),1,2,'') as Images,
stuff((select ', ' + t.Tag from Tags t where t.ListingID = p.ListingID for xml path('')),1,2,'') as Tags
from Listing p
有关实现目标的可能选项的进一步参考,请参阅http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/
但我建议使用3个简单的SELECT
并在客户端构建所需的字符串......