itsource

즉시 인라인 SQL 테이블 생성(왼쪽 조인 제외용)

mycopycode 2022. 9. 29. 00:17
반응형

즉시 인라인 SQL 테이블 생성(왼쪽 조인 제외용)

다음과 같이 가정합니다.

표 A

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

아이디 리스트가 있어요).10, 11, 12, 13, 14를 사용하여 이 테이블에서 ID를 검색할 수 있습니다.이 ID 목록은 내 프런트엔드에서 생성됩니다.

순수한 SQL을 사용하여 이 목록에서 ID를 선택해야 합니다.10, 11, 12, 13, 14표 A에 엔트리가 없는 ('id' 열에 결합)결과는 ID의 결과 집합이어야 합니다.13그리고.14.

SQL만 사용하여 이 작업을 수행하려면 어떻게 해야 합니까? (또한 가능하면 스토어드 프로시저를 사용하지 않도록 하겠습니다.)

제가 생각할 수 있는 유일한 방법은 즉시 인라인 SQL 테이블을 생성하여 일시적으로 ID 목록을 유지하는 것입니다.하지만 어떻게 해야 할지 모르겠어요.이게 가능합니까?더 좋은 방법이 있을까요?

감사합니다! :)

이 작업은 SQL Server 2008 이상에서 테이블 값 생성자를 사용하여 수행할 수 있습니다.

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

자세한 내용은 이쪽: 테이블생성자

다음 서브쿼리를 사용하여 "인라인 테이블"을 작성할 수 있습니다.

(
            SELECT 10 AS id
  UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14
  -- etc.
) AS inline_table
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
        );

이런 것도 잘 될 거야

    
    SELECT * FROM (
    SELECT 'ds' AS source
    UNION ALL
    SELECT 'cache' AS source
    ) as dataSource
----------
| source |
----------
| ds     |
----------
| cache  |
----------



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/666c1/30

언급URL : https://stackoverflow.com/questions/10709464/create-an-inline-sql-table-on-the-fly-for-an-excluding-left-join

반응형