Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL在多个表中使用不同的值_Sql_Postgresql - Fatal编程技术网

SQL在多个表中使用不同的值

SQL在多个表中使用不同的值,sql,postgresql,Sql,Postgresql,我有点困在一些SQL工作上。基本上,我有3个不同的表,看起来像这样:(注:“数字”应该是一本书的ID号,重复数字意味着它是同一本书。为了简单起见,我把它改成这样。) 表A: Number Name Surname 1 Bob Bobinson 1 Paul Paulster 2 Simon Simones 3 Anton Antonio etc. 表B: Number Book 1 Taken 1

我有点困在一些SQL工作上。基本上,我有3个不同的表,看起来像这样:(注:“数字”应该是一本书的ID号,重复数字意味着它是同一本书。为了简单起见,我把它改成这样。)

表A:

Number Name    Surname
1      Bob     Bobinson
1      Paul    Paulster
2      Simon   Simones
3      Anton   Antonio
etc.
表B:

Number   Book
1        Taken
1        
1        
2        Taken
2        Taken
3        
3        Taken
3        Taken
etc.
表C:

Number      Pages
1           245
2           147
3           512
etc.
我需要做的是对每个不同的名字和姓氏计算表B中重复的次数,然后计算每个名字和姓氏的总页码。 答案表应如下所示:

Bob Bobinson 3 735
Paul Paulster 3 735
Simon Simones 2 294
Anton Antonio 3 1536
SELECT Name, Surname, Count(A.Number = B.Number) FROM A, B, C;
我试过这样的方法:

Bob Bobinson 3 735
Paul Paulster 3 735
Simon Simones 2 294
Anton Antonio 3 1536
SELECT Name, Surname, Count(A.Number = B.Number) FROM A, B, C;
是的,老实说,我完全不知道它应该是什么样子。后来我尝试在A.Number=B.Number时实现,但对我不起作用。任何帮助都将不胜感激


另外,“take”用于稍后检查哪个号码的Taken最多。

这应该可以得到您想要的:

select A.Name, B.Surname, count(*), C.Pages
  from TableA
       Join TableB on A.Number = B.Number
       Join TableC on A.Number = C.Number
group by A.Name, B.Surname, C.Pages;
或者,如果子查询使后续更改更容易,则可以使用子查询进行更改,但一般来说,这些更改的执行效果不好:

select A.Name, B.Surname,
       (select count(*)
          from TableBB
         where B.Number = A.Number) As CNT,
       C.Pages
  from TableA
       Join TableC on A.Number = C.Number;

每日小贴士:切换到现代的显式
JOIN
语法!为什么鲍勃和保罗共用同一个身份证?@jarlh他们是一本书的合著者,数字指向不同的书,但我在这里改变了这一点,是为了让表格更容易阅读。确实如此。非常感谢。我真的需要习惯使用Join。没问题。您可能已经知道这一点,但如果您要尝试计算出下一步每本书的数量,您应该能够通过对一个案例语句进行求和来实现这一点,即sum(当B.Book='take'时,案例为1,否则为0结束)。