Create an inline SQL table on the fly (for an excluding left join)

后端 未结 4 1630
庸人自扰
庸人自扰 2020-12-13 09:26

Let\'s assume the following:

Table A

id | value
----------
1   | red
2   | orange
5   | yellow
10  | green
11  | blue
12  | indigo
20  | violet


        
相关标签:
4条回答
  • 2020-12-13 09:59
    create table B (id int)
    insert into B values (10),(11),(12),(13),(14)
    
    select *
    from B
    left join A 
    on A.id=B.id
    where A.id is null
    
    drop table B
    

    http://sqlfiddle.com/#!6/6666c1/30

    0 讨论(0)
  • 2020-12-13 10:02

    You can create an "inline table" with a UNION subquery:

    (
                SELECT 10 AS id
      UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14
      -- etc.
    ) AS inline_table
    
    0 讨论(0)
  • 2020-12-13 10:03
    CREATE TEMPORARY TABLE ids (id INT NOT NULL PRIMARY KEY);
    
    INSERT
    INTO    ids
    VALUES
    (10),
    (11),
    (12),
    (13),
    (14);
    
    SELECT  *
    FROM    ids
    WHERE   id NOT IN
            (
            SELECT  id
            FROM    a
            );
    
    0 讨论(0)
  • 2020-12-13 10:05

    You can do this from SQL Server 2008 onwards using a table value constructor.

    SELECT * FROM (
       VALUES(1, 'red'),
             (2, 'orange'),
             (5, 'yellow'),
             (10, 'green'),
             (11, 'blue'),
             (12, 'indigo'),
             (20, 'violet'))
       AS Colors(Id, Value)
    

    More information here: Table Value Constructor

    0 讨论(0)
提交回复
热议问题