mysql - 规范化表 LIMIT 问题

标签 mysql sql normalization database-normalization

我有 3 个表 songauthorsong_author

连接是歌曲 1--* Song_author 1--* 作者

我使用这样的查询

SELECT *
FROM song
LEFT JOIN song_author ON s_id = sa_song
LEFT JOIN author ON sa_author = a_id

对于给定的示例,将产生 3 行:

John - How beautiful it is
John - Awesome
George - Awesome

我正在像这样填充我的对象,所以没问题。

但是,我想添加一个 LIMIT 子句,但由于它只为一首歌曲返回多行,因此 LIMIT 10 并不总是显示 10 首歌曲。

我知道的另一种可能性是打印所有歌曲,然后在内部进行第二个查询,但这会导致我想避免的 O(n)

author:
+------+--------+
| a_id | a_name |
+------+--------+
|    1 | John   |
|    2 | George |
+------+--------+

song:
+------+---------------------+
| s_id |       s_name        |
+------+---------------------+
|    1 | How beautiful it is |
|    2 | Awesome             |
+------+---------------------+

song_author:
+-----------+---------+
| sa_author | sa_song |
+-----------+---------+
|         1 |       1 |
|         1 |       2 |
|         2 |       2 |
+-----------+---------+

最佳答案

你可以尝试这样的事情:

SELECT *
FROM
    (SELECT *
    FROM song
    LIMIT 10) r
LEFT JOIN song_author ON r.s_id = sa_song
LEFT JOIN author ON sa_author = a_id

关于mysql - 规范化表 LIMIT 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21520227/

相关文章:

sql - 规范化数据库对资源有何影响?

C++ 规范化数组

php - 在我的 php 脚本中为 loop() 消除这一层

mysql:mysql 找到剩下的所有内容

mysql - Ruby on Rails 2.3.8 : How do I do a custom SQL query, 作为对象/ActiveRecord 对象返回,而不是散列?

mysql - 如何获取自本月初以来添加的记录数

sql - 使用多个 Arel OR 子句时省略链式括号

python - sklearn 中的规范化及其差异

php - php 中不显示表格的第一行

mysql - 在 SQL 中使用 string_agg 时,如何为空值添加默认值?