【问题标题】:Creating unique Table to display different values from 3 other tables创建唯一表以显示来自其他 3 个表的不同值
【发布时间】:2016-11-11 01:59:56
【问题描述】:

我需要列出作者的名字、姓氏和已售出的图书总数。所以实际上我需要将 au_id 连接到 title_id 然后连接与他们所写书籍相对应的销售额的 SUM(qty)。

我需要内部加入吗?我觉得这是我得到错误的地方。 谢谢

表: 作者表

+-------+----------+----------+
| au_id | au_fname | au_lname |
+-------+----------+----------+

标题作者表

 +-------+---------
    | au_id |title_id|
    +-------+---------

销售表

 +-------+---------
    | title_id | QTY |
    +-------+---------

查询:

SELECT au_fname, au_lname, TOT FROM(
SELECT au_fname, au_lname FROM authors 
INNER JOIN titleauthors ON authors.au_id = titleauthors.au_id
INNER JOIN sales on titleauthors.title_id = sales.title_id WHERE titleauthors.title_id IN(
SELECT sales.title_id, SUM(sales.qty) TOT from sales
group by sales.title_id)) as t

错误:

Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
Msg 207, Level 16, State 1, Line 29
Invalid column name 'TOT'.

【问题讨论】:

    标签: sql ssms


    【解决方案1】:

    据我所知

    join 语句不能在另一个 join 语句之后。

    而且你不能像那样拔出TOT。


    这是给你的查询。

    SELECT  A.*, TS.title_id, TS.TOT
    FROM    AUTHORS A
    INNER JOIN (
        SELECT  T.*, S.TOT
        FROM    TITLEAUTHORS T
        LEFT OUTER JOIN (
            SELECT   title_id, SUM( QTY ) TOT
            FROM     SALES
            GROUP BY title_id
        ) S
        ON T.title_id = S.title_id
    ) TS
    ON A.au_id = TS.au_id
    

    这会起作用。

    因为它有外连接,

    TOT 可以为空。您可以根据您的数据库使用 IF 或其他东西来解决这个问题。


    编辑

    如果您想做的是每位作者的总销售额,而不管 title_id 是什么,

    那么应该更改该查询。

    SELECT  A.au_fname, A.au_lname, SUM( TOT ) TOT
    FROM    (
        SELECT  A.*, TS.title_id, TS.TOT
        FROM    AUTHORS A
        INNER JOIN (
            SELECT  T.*, S.TOT
            FROM    TITLEAUTHORS T
            LEFT OUTER JOIN (
                SELECT   title_id, SUM( QTY ) TOT
                FROM     SALES
                GROUP BY title_id
            ) S
            ON T.title_id = S.title_id
        ) TS
        ON A.au_id = TS.au_id
    ) A
    GROUP BY au_id
    

    试试这个。

    如果这个查询有问题,请告诉我。

    【讨论】:

    • 看起来很有效!我只需要显示 au_fname、au_lname 和数量!所以选择 A.AU_FNAME, A.AU_lname, TS.tot??
    • 另外,为什么有些作者有多个 sum 列?
    • 1.是的。 A.au_fname、A.au_lname、TS.TOT
    • 2.当AUTHORS或TITLAUTHORS中有重复记录时,可能是您所说的。
    • 有没有办法摆脱这种情况,我应该在所有的 select 语句上使用 select distinct?
    猜你喜欢
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2016-02-22
    • 2012-02-27
    相关资源
    最近更新 更多