これを試して:
SELECT * FROM table WHERE "qwerty" NOT IN (column1,column2,column3,column4,etc)
もう一つの例:
-- this...
SELECT 'HELLO!' FROM tblx
WHERE 'JOHN' NOT IN (col1,col2,col3);
-- ...is semantically equivalent to:
SELECT 'HELLO!' FROM tblx
WHERE 'JOHN' <> col1
AND 'JOHN' <> col2
AND 'JOHN' <> col3;
情報源:
create table tblx(col1 text,col2 text,col3 text);
insert into tblx values
('GEORGE','PAUL','RINGO'),
('GEORGE','JOHN','RINGO');
Postgresql を使用している場合は、列のショートカットを作成できます。
select *
from
(
select
row(tblx.*)::text AS colsAsText,
translate(row(tblx.*)::text,'()','{}')::text[]
as colsAsArray
from tblx
) x
where 'JOHN' <> ALL(colsAsArray)
ライブ テスト: http://www.sqlfiddle.com/#!1/8de35/2
Postgres は配列から行を作成できます。'JOHN' <> ALL
これは次と同等です::
where 'JOHN' NOT IN (SELECT unnest(colsAsArray))
ライブ テスト: http://www.sqlfiddle.com/#!1/8de35/6
上記が本当に達成したいことである場合は、全文検索を使用すると検索がはるかに優れています
MySQL の場合:
select
@columns := group_concat(column_name)
from information_schema.columns
where table_name = 'tblx'
group by table_name;
set @dynStmt :=
concat('select * from tblx where ? NOT IN (', @columns ,')');
select @dynStmt;
prepare stmt from @dynStmt;
set @filter := 'JOHN';
execute stmt using @filter;
deallocate prepare stmt;
ライブ テスト: http://www.sqlfiddle.com/#!2/8de35/49