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

标签 c# mysql sql razor

我有两个表:

用户:

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/

相关文章:

c# - WinForms Form_Load 未调用

PHP如何查询日期时间?

java - 结果集到通用列表列表

c# - 从ParseObject中检索ParseFile-Android C#Xamarin Parse

c# - Raycast 未击中物体

c# - 正则表达式在 C# Azure 函数中包含一个(小写、大写、数字、给定的特殊字符)

mysql - 计算两个和的总和

mysql - SELECT 语句中的 SELECT 返回 0 计数

mysql - Wordpress 限制查询结果

java - 从 getCursorName 函数读取数据时出现异常 "positioned update not supported"