表中的SQL语句

时间:2015-01-07 01:28:42

标签: sql sql-server select join sql-like

我想要做的是在表中有一个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并能够从饼表中返回123。如果您有任何建议,我真的不在乎它是如何工作的

所以我希望能够查询蛋糕并获得动态数量的馅饼。如果你能想到某种方式,即使表格也会发生变化。

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的这个例子:

http://www.sqlservercentral.com/blogs/querying-microsoft-sql-server/2013/09/19/how-to-split-a-string-by-delimited-char-in-sql-server/

从那里,尝试:

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