我错过了什么?我需要使用JOIN或UNION还是子查询?

时间:2016-10-12 05:38:27

标签: sql

我试图通过SQL进行查询。

我正在使用使用SQLite的游乐场。

有两个表格:books_northbooks_south

两者都有以下列:idtitleauthorgenrefirst_published

我尝试的查询是生成一份报告,列出两个地点的图书标题,并统计具有相同标题的图书总数。

我无法弄清楚如何开始计算。

到目前为止我已经

SELECT title
FROM   books_north
       INNER JOIN books_south
               ON books_north.title = books_south.title; 

但它只是说title是一个含糊不清的专栏。

我该怎么做?谢谢

4 个答案:

答案 0 :(得分:2)

您需要UNION ALL才能获得每个count

title
Select Title,Count(1) as [Count]
From
(
SELECT title FROM books_north bn
union all
select title from books_south bs 
) A
Group by Title

使用FULL OUTER JOIN的另一种方法(如果您的RDBMS支持)

SELECT COALESCE(bn.Title, bs.title) as title,
       ( bn.[count] + bs.[count] ) AS [Count]
FROM   (SELECT title,
               Count(1) AS [count]
        FROM   books_north
        GROUP  BY title) bn
       FULL OUTER JOIN (SELECT title,
                               Count(1) AS [count]
                        FROM   books_south
                        GROUP  BY title) bs
                    ON bn.Title = bs.Title 

关于您的错误消息,标题列出现在表中,因此当您select Title列时,您需要告诉编译器您要从哪个表中选择Title柱。可以通过为Join

中的表提供别名来完成

答案 1 :(得分:1)

SELECT COUNT( DISTINCT a.title) AS TITLECount
FROM   books_north a
       INNER JOIN books_south b
               ON a.title = b.title; 

简单的内部联接就足以让你计算。使用SELECT中的表别名来消除列title中的歧义,因为它存在于两个表中。

答案 2 :(得分:1)

关于您提到的错误:

问题是SELECT title - 它要求您具体说明title应该从哪里读取,books_northbooks_south。 因此,您需要告诉SELECT book_north.titleSELECT book_south.title关于歧义错误的所有内容。

计数在其他答案中解释。如果您想要显示group bytitle(在您的案例中基本上是count,则需要了解group by title

SELECT books_north.title, count(books_north.title)
FROM   books_north
       INNER JOIN books_south
               ON books_north.title = books_south.title
GROUP BY books_north.title;

答案 3 :(得分:0)

这有效:

   SELECT title, COUNT(title) count FROM 
   (
    SELECT title FROM books_north 
    UNION ALL
    SELECT title FROM books_south 
   )
   GROUP BY title;