如何为以下场景编写单个查询?

时间:2017-06-08 07:54:09

标签: sql mysqli

我是SQL的新手,我在为一个场景编写查询时遇到了问题。我有3张桌子:

  • 表1包含演员姓名和电影ID

    Table1      
    Actor-ID  Actor-name    Movies_id
    
  • 表2包含movie-id和相应的电影名称。

    Table2          
    Movies_id   Movies_name 
    
  • 表3包含电影ID和电影产生的相应收入。

    Table3  
    Movies_id   Revenue_generated
    

我想编写一个查询来获取以下场景的数据: 任何一位演员的电影都超过100 crores

我没有在表格中提及任何数据,因此您可以随意添加数据。

3 个答案:

答案 0 :(得分:0)

这会帮助你。

SELECT
    A.Actor-name,B.Movies_name
        FROM
            table1 A INNER JOIN table2 ON
                A.Movies_id= B.Movies_id
            INNER JOIN table3 C ON
                A.Movies_id= C.Movies_id
        WHERE C.Revenue_generated > 10000000000

答案 1 :(得分:0)

数据:

DECLARE @ColName NVARCHAR(225) ,
        @FieldID INT;
    DECLARE columnCursor CURSOR
    FOR
        SELECT  COLUMN_NAME
        FROM    INFORMATION_SCHEMA.COLUMNS
        WHERE   TABLE_NAME = 'acc_Account'
                AND TABLE_SCHEMA = 'dbo';

    DECLARE @deleted_colmn INT;

    DECLARE CurDB CURSOR
    FOR
        SELECT  @deleted_colmn
        FROM    #Deleted;


    OPEN columnCursor;

    FETCH NEXT FROM columnCursor INTO @ColName;

    WHILE ( @@FETCH_STATUS <> -1 )
        BEGIN



            --OPEN CurDB;
            --FETCH NEXT FROM CurDB INTO @deleted_colmn;

            SET @FieldID = ( SELECT TOP 1
                                    FieldID
                             FROM   fld_Field
                             WHERE  fld_Field.FieldName = @ColName
                           );


            SET @newvalue = ( SELECT TOP 1
                                        @ColName
                              FROM      Inserted
                              WHERE     @ColName = @ColName
                            );
            SET @oldvalue = ( SELECT TOP 1
                                        @ColName
                              FROM      Deleted
              IF @newvalue <> @oldvalue
                BEGIN

                    INSERT  INTO dbo.utl_Audit_Trail_Field
                            ( AuditTrailID ,
                              FieldID ,
                              OldValue ,
                              NewValue ,
                              CreatedDate ,
                              CreatedUserID ,
                              UpdatedDate ,
                              UpdatedUserID
                            )
                    VALUES  ( @AuditTrailID , -- AuditTrailID - bigint
                              @FieldID , -- FieldID - bigint
                              @oldvalue , -- OldValue - nvarchar(1000)
                              @newvalue , -- NewValue - nvarchar(1000)
                              @CreatedDate , -- CreatedDate - datetime
                              @CreatedUserID , -- CreatedUserID - bigint
                              @CreatedDate , -- UpdatedDate - datetime
                              @CreatedUserID  -- UpdatedUserID - bigint
                            );

                END;  

            FETCH NEXT FROM columnCursor INTO @ColName;

        END;                WHERE     @ColName = @ColName

                            );

查询:

INSERT [dbo].[Table1] ([Actor_ID], [Actor_Name], [Movies_ID]) VALUES 
(1, N'A1', 2),
(2, N'A2', 1),
(3, N'A3', 3),
(3, N'A3', 4),
(2, N'A2', 6)

INSERT [dbo].[Table2] ([Movies_ID], [Movies_Name]) VALUES 
(1, N'M1'),
(2, N'M2'),
(3, N'M3')
(4, N'M4'),
(5, N'M5'),
(6, N'M6')

INSERT [dbo].[Table3] ([Movies_ID], [Revenue_generated]) VALUES
(1, 50),
(2, 100),
(3, 150),
(4, 75),
(5, 120),
(6, 115)

将100替换为所需的值。

答案 2 :(得分:0)

您应该使用这些表重新设计数据库:

  • 演员(actor_id,姓名)
  • 电影(movie_id,名称,收入)
  • actor_movie(actor_id,movie_id)

查询将是:

select *
from movie
where revenue > 1000000000
and movie_id in
(
  select movie_id
  from actor_movie      
  where actor_id = (select actor_id from actor where name = 'Bruce Willis')
);