寻找一个查询来比较三个表

时间:2018-01-29 15:54:35

标签: sql-server oracle

我的数据库中有以下3个表格。

Table 1:
 A
 B
 C
 D

Table 2:
 B
 D
 E
 F

Table 3:
 A
 B
 E
 G

我正在寻找一个查询,其中表1与表2和表3进行比较,结果为是或否。

例如:在表1中,我们有' A'在表2中,我们没有A'但是' A'在表3中有,所以结果将是' No'

但在表1中,我们有' B'在表2中,我们有' B'和' B'在表3中也是如此,结果将是' Yes'。

此致 维卡斯

4 个答案:

答案 0 :(得分:0)

这样的东西?

platform[]

答案 1 :(得分:0)

试试这个:

 select colm1,case when count(*) = 3 then 'Yes' else 'No' end Result
 from
 (SELECT distinct colm1 FROM TAB1
  union all
  SELECT distinct colm2 FROM TAB2
  union all
  SELECT distinct colm3 FROM TAB3)a group by colm1  

答案 2 :(得分:0)

另一种选择是创建一个函数。实施例

     ----Source

    CREATE TABLE ONE ( Let VARCHAR(10) )
    INSERT  INTO ONE
    VALUES  ( 'A' ),
            ( 'B' ),
            ( 'C' ),
            ( 'D' )
    GO
    CREATE TABLE TWO ( LET VARCHAR(10) )
    INSERT  INTO TWO
    VALUES  ( 'B' ),
            ( 'D' ),
            ( 'E' ),
            ( 'F' )
    GO
    CREATE TABLE THREE ( Let VARCHAR(10) )
    INSERT  INTO THREE
    VALUES  ( 'A' ),
            ( 'B' ),
            ( 'E' ),
            ( 'G' )
    GO


    ----Function

    CREATE FUNCTION isCompare ( @let VARCHAR(10) )
    RETURNS VARCHAR(10)
    AS
        BEGIN

            IF ( EXISTS ( SELECT    1
                          FROM      TWO
                          WHERE     let = @let )
                 AND EXISTS ( SELECT    1
                              FROM      THREE
                              WHERE     let = @let )
               )
                BEGIN
                    RETURN 'YES'
                END

            RETURN 'NO'
        END
    GO

  ----Query

    SELECT  dbo.isCompare(let) RESULT
    FROM    ONE 
    GO

 --- End Query

    DROP TABLE ONE
    DROP TABLE TWO
    DROP TABLE THREE
    DROP FUNCTION isCompare
    GO

结果:

    RESULT
    ----------
    NO
    YES
    NO
    NO

    (4 row(s) affected) 

答案 3 :(得分:0)

假设我们有三个表格如下:

DECLARE @t1 TABLE (id CHAR)
INSERT INTO @t1 VALUES('a'),('b'),('c'),('d')

DECLARE @t2 TABLE (id CHAR)
INSERT INTO @t2 VALUES('b'),('d'),('e'),('f')

DECLARE @t3 TABLE (id CHAR)
INSERT INTO @t3 VALUES('a'),('b'),('e'),('g')

我们可以简单地使用LEFT JOIN来解决问题,如下所示:

SELECT
    t1.id, 
    t2.id, 
    t3.id, 
    CASE WHEN t1.id IS NULL OR t2.id IS NULL OR t3.id IS NULL THEN 'NO'
         ELSE 'Yes' 
    END AS Msg
FROM @t1 as t1 
     LEFT JOIN @t2 AS t2 ON t1.id=t2.id
     LEFT JOIN @t3 AS t3 ON t2.id=t3.id