gpt4 book ai didi

SQL连接多对多

转载 作者:行者123 更新时间:2023-12-02 18:21:54 25 4
gpt4 key购买 nike

我有三个这样的表:

项目:

enter image description here

类别

enter image description here

和一个简单的 MtM 表来连接它们

enter image description here

出于报告目的,我一直想知道是否可以创建一个包含该项目所属的所有类别的串联字段。例如,如果项目 ID=1 将属于类别 ID=1 和 ID=2;我可以对项目进行选择并获取值为“Schuhe;”的字段“类别”。赫姆德'

仅使用 SQL 就可以做到这一点吗?

我能想到的最好的

SELECT Items.*, Categories.CategoryName
FROM (CategoryItemAffinities
INNER JOIN Categories ON CategoryItemAffinities.CategoryID = Categories.ID)
INNER JOIN Items ON CategoryItemAffinities.ItemID = Items.ID;

但这显然会为每个项目产生多个结果

[编辑]只是要说明的是,ms access 只是数据库引擎,我本身不使用 Access 表单/报告等。我需要这个用于 C# 应用程序

最佳答案

Jet DB 不包含用于字符串连接的聚合函数。您可以创建自己的函数来执行您需要的操作。首先,您需要包含 itemID 和类别的 STRING 值的数据,如下所示:

yourTableOrQueryName

DAta

然后编写一个自定义函数,如下所示:

Public Function getCats(theID)
Dim rs As Recordset
Dim db As Database
Dim qstr As String
Dim returnString As String

qstr = "SELECT category FROM yourTableOrQueryName WHERE itemID = " & theID

Set db = CurrentDb
Set rs = db.OpenRecordset(qstr)

Do While Not rs.EOF
returnString = returnString & ", " & rs!Category
rs.MoveNext
Loop

getCats = Mid(returnString, 3, Len(returnString) - 2)

End Function

那么您的查询如下所示:

SELECT itemID, getCats([itemID]) AS catList
FROM yourTableOrQueryName
GROUP BY itemID;

可以对该查询进行优化,这样它就不会通过嵌套一个选择唯一查询来为每个 ID 运行多次,该查询仅在运行“getCats()”函数之前获取您的唯一 ID(如果您想要修剪毫秒),但我把这个留给你了。

结果:

resuklts

关于SQL连接多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25555970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com