SQL交叉表引用
好的,我有两张桌子。一个表表1包含一列Books_Owned_ID,它以1,3,7的形式存储一系列数字。我有另一个表2,它在一列中存储图书名称,在另一列中存储图书ID 我想做的是创建一个SQL代码,它将从我拥有的书籍中获取数字,并在新列中显示这些书籍的名称。像这样:SQL交叉表引用,sql,sql-server,Sql,Sql Server,好的,我有两张桌子。一个表表1包含一列Books_Owned_ID,它以1,3,7的形式存储一系列数字。我有另一个表2,它在一列中存储图书名称,在另一列中存储图书ID 我想做的是创建一个SQL代码,它将从我拥有的书籍中获取数字,并在新列中显示这些书籍的名称。像这样: |New Column | Book 1 Name Book 2 Name Book 3 Name 我无法理解这一点,这很简单,但我看到的所有线索都非常混乱 表1包含以下列: |First_Name| Last_Name|
|New Column |
Book 1 Name
Book 2 Name
Book 3 Name
我无法理解这一点,这很简单,但我看到的所有线索都非常混乱
表1包含以下列:
|First_Name| Last_Name| Books_Owned_ID |
|Book_Name|Book_ID|
表2包含以下列:
|First_Name| Last_Name| Books_Owned_ID |
|Book_Name|Book_ID|
你需要做一个内部连接 编辑 我将努力使列逗号拆分工作正常。这不会有太多的额外费用 编辑2,然后可以执行以下操作:
SELECT Book_Name FROM Table2
WHERE Book_ID IN(SELECT FN_ListToTable(',',Table1.Books_Owned_ID) FROM Table1 s)
你需要做一个内部连接 编辑 我将努力使列逗号拆分工作正常。这不会有太多的额外费用 编辑2,然后可以执行以下操作:
SELECT Book_Name FROM Table2
WHERE Book_ID IN(SELECT FN_ListToTable(',',Table1.Books_Owned_ID) FROM Table1 s)
您需要一个函数,它接受逗号分隔的列表并返回一个表。这是一个缓慢的、从根本上说是一个坏主意。实际上,所有这些都是将这种方式转换为我下面描述的数据模型。有关这方面的示例,请参见专业业余爱好者的答案 如果您刚刚开始更改数据模型。制作一个链接表。像这样: 好的,我有两张桌子。一个表表1包含一列Books_Owned_ID,它以1,3,7的形式存储一系列数字。我有另一个表2,它在一列中存储图书名称,在另一列中存储图书ID 我想做的是创建一个SQL代码,它将从我拥有的书籍中获取数字,并在新列中显示这些书籍的名称。像这样: 人员表
|First_Name| Last_Name| Person_ID |
书桌
|Book_Name|Book_ID|
|PersonID|BookID|
人事登记表
|Book_Name|Book_ID|
|PersonID|BookID|
此表中每个人可以有多行。您需要一个函数,该函数采用逗号分隔的列表并返回一个表。这是一个缓慢的、从根本上说是一个坏主意。实际上,所有这些都是将这种方式转换为我下面描述的数据模型。有关这方面的示例,请参见专业业余爱好者的答案 如果您刚刚开始更改数据模型。制作一个链接表。像这样: 好的,我有两张桌子。一个表表1包含一列Books_Owned_ID,它以1,3,7的形式存储一系列数字。我有另一个表2,它在一列中存储图书名称,在另一列中存储图书ID 我想做的是创建一个SQL代码,它将从我拥有的书籍中获取数字,并在新列中显示这些书籍的名称。像这样: 人员表
|First_Name| Last_Name| Person_ID |
书桌
|Book_Name|Book_ID|
|PersonID|BookID|
人事登记表
|Book_Name|Book_ID|
|PersonID|BookID|
此表中每个人可以有多行。此表的核心是数据规范化。。。每个事实只存储一次,因此具有权威性。您还应该养成在任何字段中只存储一个事实的习惯 所以,想象一下下面的表格布局
Books
Id, Name, Description
Users
Id, Username, EmailAddress, PasswordHash, etc....
BooksOwned
UserId, BookId
因此,如果一个用户拥有多本书,那么BooksOwned表中将有多个条目
指示用户1拥有书籍1到3
这样做的原因是它使将来的查询更加容易。您还可以将BookId视为一个整数,而不是包含列表的字符串,这样您就不必担心在执行查询时需要对字符串进行操作
下面将返回Id为1的用户拥有的所有书籍的名称
其核心是数据规范化。。。每个事实只存储一次,因此具有权威性。您还应该养成在任何字段中只存储一个事实的习惯 所以,想象一下下面的表格布局
Books
Id, Name, Description
Users
Id, Username, EmailAddress, PasswordHash, etc....
BooksOwned
UserId, BookId
因此,如果一个用户拥有多本书,那么BooksOwned表中将有多个条目
指示用户1拥有书籍1到3
这样做的原因是它使将来的查询更加容易。您还可以将BookId视为一个整数,而不是包含列表的字符串,这样您就不必担心在执行查询时需要对字符串进行操作
下面将返回Id为1的用户拥有的所有书籍的名称
您使用的数据库是什么?标签Books\u Owned\u Id和Book\u Id是否相同?如果是这样的话,您可以加入到它们中。Books_Owned_ID中的值真的是一个以逗号分隔的Book_ID列表吗?如果是这样,那就是你遇到麻烦的原因。您需要一个连接表1和表2的第三个1对多表。我正在使用MS SQL Server和MS Management Studio。等等,不,嗯。。。这是数据结构中的一个设计问题。你可能想要三张桌子而不是两张:人、书和书。当前的设计将来可能会给您带来困难。您使用的数据库是什么?Books_Owned_Id和Book_Id标签是否相同?如果是这样的话,你可以加入到它们上面。图书中的值是否真的是一个逗号分隔的Boo列表
你的身份证?如果是这样,那就是你遇到麻烦的原因。您需要一个连接表1和表2的第三个1对多表。我正在使用MS SQL Server和MS Management Studio。等等,不,嗯。。。这是数据结构中的一个设计问题。你可能想要三张桌子而不是两张:人、书和书。当前的设计可能会在将来给您带来困难。但这不会给您一个以逗号分隔的书名列表。更新了前面SO问题的示例答案,这些问题拆分了逗号分隔的字段并可以使用。如果他想将这些结果转换回逗号列表,他可以在此处使用XML作为我的答案:但是这不会给你一个以逗号分隔的书名列表。更新了前面SO问题的示例答案,这些问题拆分了逗号分隔的字段并可以使用。如果他想将这些结果转换回逗号列表,他可以使用XML作为我的答案:正是我所指的!谢谢你的帮助@BasicMy-cellose-能找到一个想要理解的人总是很好的。希望将来能见到你。正是我所说的!谢谢你的帮助@BasicMy-cellose-能找到一个想要理解的人总是很好的。希望将来能见到你。