gpt4 book ai didi

c# - 如何编写一列返回多个结果的SQL查询C#

转载 作者:行者123 更新时间:2023-11-29 02:51:04 25 4
gpt4 key购买 nike

我有两个表:

用户:

ID    Name
----------------
1 Bob
2 Dave
3 Mike

书籍:

ID  UserId   BookName
------------------------
1 1 Cat in Hat
2 1 Happy Birthday
3 1 One Fish
4 2 Goldilocks
5 2 Three Crows
6 3 Hitchhikers

UserId 是显示每个用户拥有哪些书籍的键

在我的 html 中,我想创建如下所示的输出:

Name       Books Owned
-------------------------
Bob Cat in Hat, Happy Birthday, One Fish
Dave Goldilocks, Three Crows
Mike Hitchhikers

目前我正在使用循环和嵌套查询来执行此操作:

var queryusers = db.Query("SELECT * FROM users");

foreach (var user in queryusers) {
<span>@user.name</span>
var querybooks = db.Query("SELECT * FROM books WHERE userid = @0", user.id);
foreach (book in querybooks ) {
<span>@book.bookname</span>
}
}

我知道这不好,但我不知道如何使用 JOIN 来做到这一点。如果我尝试:

var queryusersandbooks = db.Query("SELECT * FROM users INNER JOIN books ON users.id = books.userid");

我的查询返回 6 行,但我只想要 3 行。有没有办法在循环中不使用 SQL 查询的情况下执行此操作?

谢谢

最佳答案

您正在寻找GROUP_CONCAT .尝试这样的事情:

SELECT name AS Name, GROUP_CONCAT(books.bookname SEPARATOR ', ') AS Books 
FROM books INNER JOIN users ON users.id=books.userid
GROUP BY books.userid;

请记住 GROUP-CONCAT 有 1024 个字符的限制,因此如果您需要更多空间,请在执行 SQL 之前设置更大的阈值,如下所示:

SET SESSION group_concat_max_len = 1000000;
SELECT name AS Name, GROUP_CONCAT(books.bookname SEPARATOR ', ') AS Books
FROM books INNER JOIN users ON users.id=books.userid
GROUP BY books.userid;

这是一个working fiddle .

关于c# - 如何编写一列返回多个结果的SQL查询C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35638996/

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