mysql - SQL 数据库连接

标签 mysql sql-server database

我想对 DESC 中英国作者写的书籍进行排序出版年份顺序。我已经用谷歌搜索了内部连接,但我无法将字符串转换为整数,所以它不起作用。请问有什么想法吗?

CREATE DATABASE [Books Database]

    CREATE TABLE [Books]
    (
    [id] [int] IDENTITY (1,1) NOT NULL,
    [book name] [NVARCHAR] (75),
    [year published] [int],
    [book prize won] [NVARCHAR] (75),
    )



    INSERT INTO [Books] ([book name], [year published], [book prize won])
    VALUES('Amsterdam',1998, 'Booker prize')

    INSERT INTO [Books]
    VALUES('The God of Small Things',1997, 'Booker prize')

    INSERT INTO [Books]
    VALUES('The Cost of Living',1999, NULL)

    INSERT INTO [Books]
    VALUES('Last Orders',1996, 'Booker prize')

    INSERT INTO [Books]
    VALUES('The Sweetshop Owner',1997,NULL)

    INSERT INTO [Books]
    VALUES('How Late it Was, How Late',1994 , 'Booker prize')

    INSERT INTO [Books]
    VALUES('Spirit Level',1996, 'Whitbread Poetry and the Whitbread Book prizes')

    INSERT INTO [Books]
    VALUES('Behind the Scenes at the Museum',1995  , 'Whitbread Book prize')

    INSERT INTO [Books]
    VALUES('Emotionally Weird',2000, NULL)

    INSERT INTO [Books]
    VALUES('Human Croquet',1998, NULL)

    INSERT INTO [Books]
    VALUES('Felicia''s Journey' ,1994, 'Whitbread Novel and the Whitbread Book prizes')

    INSERT INTO [Books]
    VALUES('Every Man for Himself',1996, 'Whitbread Novel prize')

    INSERT INTO [Books]
    VALUES('Midnight''s Children',1980, 'Booker prize')

    INSERT INTO [Books]
    VALUES('The Satanic Verses',1988, 'Whitbread Novel prize')

    INSERT INTO [Books]
    VALUES('The Moor''s Last Sigh',1995 , 'Whitbread Novel prize')


    INSERT INTO [Books]
    VALUES('Larry''s Party',1998, 'Orange prize')


    INSERT INTO [Books]
    VALUES('Fugitive Pieces',1997 , 'Orange and the Guardian Fiction prizes')


    INSERT INTO [Books]
    VALUES('Reading in the Dark' ,1996 , 'Guardian Fiction prize')


    INSERT INTO [Books]
    VALUES('Debatable Land',1994, 'Guardian Fiction prize')


    CREATE TABLE [Authors]
    (
    [id] [int] IDENTITY (1,1) NOT NULL,
    [author name] [NVARCHAR] (75),
    [author surname] [NVARCHAR] (75),
    [nationality] [NVARCHAR] (75),
    [yob] [int]
    )


    INSERT INTO [Authors] ([author name], [author surname],[nationality], [yob])
    VALUES('Ian', 'McEwan', 'English', 1948)

    INSERT INTO [Authors]
    VALUES('Arundhati','Roy', 'Indian', 1961)

    INSERT INTO [Authors]
    VALUES('Graham','Swift', 'English', 1949)

    INSERT INTO [Authors]
    VALUES('James','Kelman', 'Scottish', 1946)

    INSERT INTO [Authors]
    VALUES('Seamus','Heaney', 'Irish', 1939)

    INSERT INTO [Authors]
    VALUES('Kate','Atkinson', 'English', 1951)

    INSERT INTO [Authors]
    VALUES('William','Trevor','Irish', 1928)

    INSERT INTO [Authors]
    VALUES('Beryl','Bainbridge','English', 1936)

    INSERT INTO [Authors]
    VALUES('Salman','Rushdie','Indian', 1947)

    INSERT INTO [Authors]
    VALUES('Carol','Shields','American', 1950)

    INSERT INTO [Authors]
    VALUES('Anne','Michaels','Canadian', 1955)

    INSERT INTO [Authors]
    VALUES('Seamus','Deane','Irish', 1940)

    INSERT INTO [Authors]
    VALUES('Candia','McWilliam','Scottish', 1955)



    /* 1) List name and surname of all authors in alphabetical order. */
    SELECT TOP 1000 [id]
          ,[author name]
          ,[author surname]
          ,[nationality]
          ,[yob]
      FROM [Books Database].[dbo].[Authors]
      ORDER BY [author name],[author surname] ASC



        /* 2) List title of all books written by English authors in descending order of publication year. */


    SELECT TOP 1000
           [author name]
          ,[author surname]
          ,[nationality]
          ,[yob]
      FROM [Books Database].[dbo].[Authors]
      INNER JOIN [Books Database].[dbo].[Books]
      ON [Books Database].[dbo].[Authors].[nationality] = [Books Database].[dbo].[Books].[year published]
      ORDER BY [year published] DESC

最佳答案

以下 JOIN 查询中有 2 个问题:

INNER JOIN [Books Database].[dbo].[Books]
ON [Books Database].[dbo].[Authors].[nationality] = [Books Database].[dbo].[Books].[year published]

问题 1:

此处,[国籍]VARCHAR(75)[出版年份]INT。匹配不同的数据类型会导致转换问题。

上述条件可以修改为:

FROM [Books Database].[dbo].[Authors] AU
INNER JOIN [Books Database].[dbo].[Books] BO ON AU.[yob] = BO.[year published]

这意味着匹配两个表中的年份值,并且它们的数据类型是INT

问题 2:

希望这些也不会在您的情况下返回任何数据,因为在 Authors 表中 yob 的范围是从 1928 年到 1961 年,而在 Books 中code> 范围从 1980 年到 2000 年。

为了更好的可读性,我添加了AUBO作为表别名。

关于mysql - SQL 数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38455588/

相关文章:

sql - 检查用户是否具有 CREATE DATABASE 权限

mysql - 用于导出成员详细信息的 SQL Join

mysql - 如何在网络服务器上存储许多图像?

php - 在 PHP 中执行的 MySQL 查询导致非常大的 httpd 线程

php - PDO异常 : SQLSTATE[28000] [1045] Access denied for user

sql - T-SQL获取2个日期之间的工作日数

c# - 在与 SQL Server 的 ODBC 连接中打开多个结果集

MySQL:跨多对多和一对多(以及其他东西)进行计数

mongodb - 在表中创建 mongodb 列表

search - 如何在cassandra中搜索?