我有2列,分别称为GenreID和CustomGenre(指一本书的体裁)。 GenreID是一个整数,它引用名为GenreName的列中的不同表中列出的流派。如果用户不喜欢任何预定义选项,或者想要添加更多信息(例如子流派),则CustomGenre允许用户为此行输入自己的文本。

我想做的是,同时按字母顺序对这些内容进行排序,并优先选择GenreName。因此,如果该行具有GenreID,则将按GenreName对其进行排序。如果该行没有GenreID(或为零),则CustomGenre会被视为GenreName,因此我将得到一个列表,如果我显示“ GenreName,CustomGenre”,则实际上按字母顺序排列,即使行未引用任何GenreName。

以防万一,下面是一个小例子:

类型:
GenreID GenreName
1科幻
2幻想


图书:
Book GenreID CustomGenre
示例1未来主义
一本书2
另一本书!恐怖


我希望对它们进行这样的排序,其中第二列按字母顺序排列:

结果:
图书类型名称+自定义类型
一本书的幻想
另一本书!恐怖
科幻,未来主义的例子


谢谢!

最佳答案

您需要使用CONCAT函数。

尝试这个:

SELECT
    b.Book,
    CONCAT( b.CustomGenre, g.GenreName) as the_genre
FROM
    Books b
LEFT JOIN Genre g
    ON b.GenreID = g.GenreID
ORDER BY
    the_genre

08-17 00:04