创建唯一 Table 以显示来自其他 3 个表的不同值
Creating unique Table to display different values from 3 other tables
我需要列出作者的名字、姓氏和他们已售出的书籍的总数量。所以实际上我需要将 au_id 连接到 title_id,然后连接与他们所写书籍对应的销售额的 SUM(qty)。
我需要内连接吗?我觉得这就是我出错的地方。
谢谢
表格:
作者 TABLE
+-------+----------+----------+
| au_id | au_fname | au_lname |
+-------+----------+----------+
标题作者TABLE
+-------+---------
| au_id |title_id|
+-------+---------
销售额TABLE
+-------+---------
| 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'.
据我所知,
连接语句不能在另一个连接语句之后。
而且你不能像那样拉出 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_id 连接到 title_id,然后连接与他们所写书籍对应的销售额的 SUM(qty)。
我需要内连接吗?我觉得这就是我出错的地方。 谢谢
表格: 作者 TABLE
+-------+----------+----------+
| au_id | au_fname | au_lname |
+-------+----------+----------+
标题作者TABLE
+-------+---------
| au_id |title_id|
+-------+---------
销售额TABLE
+-------+---------
| 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'.
据我所知,
连接语句不能在另一个连接语句之后。
而且你不能像那样拉出 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
试试这个。
如果此查询出错,请告诉我。