好的,所以我有两张桌子。一个表(table 1
)包含一列Books_Owned_ID
,它以1,3,7
的形式存储一系列数字。我有另一个表(table 2
),它将Book名称存储在一列中,书籍ID存储在另一列中。
我想要做的是创建一个SQL代码,该代码将从Books_Owned_ID
中获取数字,并在新列中显示这些书籍的名称。像这样:
|New Column |
Book 1 Name
Book 2 Name
Book 3 Name
我无法解决这个问题,这很简单,但我看到的所有线程都让人感到困惑。
Table1
包含以下列:
|First_Name| Last_Name| Books_Owned_ID |
Table2
包含以下列:
|Book_Name|Book_ID|
答案 0 :(得分:2)
您需要进行内部联接。 This is a great example/reference for these
SELECT Book_Name FROM Table2
INNER JOIN Table1
ON Table1.Books_Owned_ID = Table2.Book_ID
编辑 SQL Fiddle
我将努力让列逗号分割工作。这不会是额外的。
编辑2 See this answer to build a function to split your string.然后你可以这样做:
SELECT Book_Name FROM Table2
WHERE Book_ID IN(SELECT FN_ListToTable(',',Table1.Books_Owned_ID) FROM Table1 s)
答案 1 :(得分:1)
您需要一个以逗号分隔的列表并返回表格的函数。这很慢,从根本上说是一个坏主意。实际上所有这一切都是将这种做法转换成我在下面描述的数据模型。 (有关此示例,请参阅ProfessionalAmateur的答案。)
如果您刚开始更改数据模型。制作链接表。像这样:
好的,所以我有两张桌子。一个表(表1)包含一列Books_Owned_ID,它以1,3,7的形式存储一系列数字。我有另一个表(表2),它将Book名称存储在一列中,书籍ID存储在另一列中。
我想要做的是创建一个SQL代码,该代码将从Books_Owned_ID中获取数字,并在新列中显示这些书籍的名称。像这样:
人员表
|First_Name| Last_Name| Person_ID |
书桌
|Book_Name|Book_ID|
PersonBook Table
|PersonID|BookID|
此表可为每个人提供多行。
答案 2 :(得分:1)
其核心围绕数据规范化......每个事实只存储一次(因此是“权威的”)。你应该养成只在任何领域存储一个事实的习惯。
因此,想象下面的表格布局......
Books
Id, Name, Description
Users
Id, Username, EmailAddress, PasswordHash, etc....
BooksOwned
UserId, BookId
因此,如果一个用户拥有多本图书,BooksOwned
表中会有多个条目......
UserId, BookID
1, 1
1, 2
1, 3
表示用户1拥有书籍1到3。
这样做的原因是它使将来查询变得更容易。您还将BookId视为整数而不是包含列表的字符串 - 因此您无需担心字符串操作来执行查询。
以下内容将返回用户拥有Id = 1
SELECT Books.Name
FROM BooksOwned
INNER JOIN Books
ON BooksOwned.BookId = Books.Id
WHERE BooksOwned.UserId = 1