11

私がタイプした場合:

SELECT name FROM table WHERE name NOT IN ('Test1','Test2','Test3');

リストにないエントリをテーブルから取得できます。反対のことをしたい:テーブルにない値をリストから取得する。たとえば、テーブルに「Test1」および「Test3」という値を持つnameという名前の列がある場合、それを(「Test1」、「Test2」、「Test3」)と比較して、Test2を返します。または、別の例として、テーブルが空の場合は、リスト内のすべてを返します:Test1、Test2、およびTest3。

リスト内のすべての値を使用して新しいテーブルを作成せずにこれを行う方法はありますか?

4

5 に答える 5

10

持っている値の数に応じて、いくつかの結合を行うことができます。

参照:http ://www.sqlfiddle.com/#!5 / 0e42f / 1

select * from (
  select 'Test 1' thename union
  select 'Test 2' union 
  select 'Test 3'
)
where thename not in (select name from foo)
于 2012-04-24T18:58:11.477 に答える
2

私は通常、SELECT 'FOO' AS COL UNION SELECT 'BAR'etcを使用してから、左結合とチェックの標準的なイディオムを使用して、NULL欠落している要素を見つけます。

CREATE TABLE #YourTable(
name nvarchar(50)
)

insert into #YourTable (name) values ('Test1'), ('Test3')

-- ALL
select * from #YourTable

--MISSING
select t1.* from (
  select 'Test1' testName
  union select 'Test2'
  union select 'Test3') as t1
  left outer join #YourTable yt on t1.testName = yt.name
  where yt.name is null

DROP TABLE #YourTable

出力を出します

name
--------------------------------------------------
Test1
Test3

(2 row(s) affected)

testName
--------
Test2

(1 row(s) affected)
于 2012-04-24T19:04:22.397 に答える
1
Select a.value from (
SELECT 'testvalue' value UNION
SELECT 'testvalue2' value UNION
SELECT 'testvalue3' value UNION
SELECT 'testvalue4' value UNION
) a
left outer join othertable b
on a.value=b.value
where b.value is null

これは、一時テーブルがない私の問題に最適です#

于 2016-01-04T10:41:59.573 に答える
0

「othertable」が問題のテーブルを保持していると仮定すると...

 select a.value from 
    (select 'test1' value
     union
     select 'test2' value
     union 
     select 'test3' value) a
       left outer join othertable b
         on a.value=b.value
      where b.value is null
于 2012-04-24T19:00:07.827 に答える
0

SQL Serverでは、以下のクエリが適切に機能します。

SELECT v.val FROM (VALUES 
    ('A'), 
    ('B'), 
    ('C'), 
    ('D'), 
    ('E') 
) v (val)
LEFT JOIN dbo.TABLE_NAME t ON t.COLUMN_NAME = v.val
WHERE t.COLUMN_NAME IS NULL;

以下の出力を見つけることができます:

val
-------
A
B
C
D
于 2020-12-02T06:22:18.683 に答える