我想要做的是在表中有一个SQL连接。 这是它的样子:
Id type message
1 2 'hello'
2 0 'bye'
3 2 'meh'
Id data pieId
1 70 1@2
2 6 2
3 8 1@3@2
这就是两个表的样子,我想要做的是能够选择蛋糕表data = 70
并让它返回蛋糕表的第1行,并返回第1行和第2行馅饼桌。
我并不十分关心它将它们作为单独的表,行,连接或列返回。
我真正想要的是能够向数据库询问data = 8
并能够从饼表中返回1
,2
和3
。如果您有任何建议,我真的不在乎它是如何工作的
所以我希望能够查询蛋糕并获得动态数量的馅饼。如果你能想到某种方式,即使表格也会发生变化。
答案 0 :(得分:7)
看起来您需要更新数据库设计
我会从蛋糕表中删除pieId并创建一个关系表。让我们用Id,PieId,CakeId称它为CakePies。只需将关系添加到该表
即可查询将是
Select *
from Cake c
Inner join CakePies cp on c.Id = cp.CakeId
inner join Pies p on p.Id = cp.PieId
where Data = 70 -- or whatever filter you want
<强>更新强> 您的CakePies表应如下所示:
CakeID PieId
1 1
1 2
2 2
3 1
3 2
3 3
答案 1 :(得分:1)
看一下fnSplitString的这个例子:
从那里,尝试:
SELECT c.id, c.data, (SELECT message FROM pie WHERE pieid IN (SELECT * FROM fnSplitString(c.pieid, '@') ) AS 'message'
FROM cake c
WHERE c.data = 8
哪个有点傻 - 你最好不要使用pieid列的关系结构:例如:
cake table
Id data pieId
1 70 1
1 70 2
...
答案 2 :(得分:0)
试试这个:
SELECT c.Id, c.data, p.Id, p.type, p.message
FROM cake c
INNER JOIN pie p ON '@' + c.pieId + '@' LIKE '%@' + p.Id + '@%'
WHERE c.data = 70