Нет встроенного способа сделать это.Вам нужно будет сделать:
SELECT * FROM Table WHERE Column1 = <your-value>
UNION
SELECT * FROM Table WHERE Column2 = <your-value>
UNION
...
Автоматическая генерация запроса
Существует ли программный способ генерации массовых операторов UNION-SELECT?Некоторые из моих таблиц целей имеют многочисленные столбцы.
Какое оружие вы предпочитаете?Что это за имя базы данных, имя таблицы и значение?Моим оружием выбора является SQLCMD, программа доступна из Архива программного обеспечения IIUG , а не созданного Microsoft в последнее время одноименного создания.
dbname=stores
table=customers
value=Raymond
sqlcmd -D'\n' -d $dbname -e \
"select 'SELECT * FROM $table WHERE ', c.colname,
'::VARCHAR(64) = ''$value''', 'UNION'
from informix.syscolumns as c
join informix.systables as t on t.tabid = c.tabid
where t.tabname = '$table' order by colno" |
sed '$d'
Ключевые слова выходного запроса в верхнем регистре;мета-запрос, который генерирует его, находится в нижнем регистре.Мета-запрос представляет собой объединение SysTables с SysColumns.Параметр «-D '\n'
» говорит «разделитель полей - это новая строка» (а также разделитель записей).Я удостоверяюсь, что СОЮЗ находится на отдельной линии, чтобы облегчить удаление последнего.Я привел столбцы к VARCHAR (64), чтобы их можно было сравнивать со строкой независимо от типа источника - почти независимо от типа источника, поскольку столбцы BYTE, TEXT, BLOB и CLOB не будут преобразованы.Если вам нужен предикат LIKE '%Raymond%'
, измените запрос соответствующим образом.
Вы можете добиться аналогичных результатов с Perl и DBI и DBD :: Informix.
Получение вывода с помощью DB-Access будетбеспорядочный;вы, вероятно, использовали бы встроенный 'OUTPUT TO "/dev/stdout" WITHOUT HEADINGS select ...
', где ... - это остаток запроса, показанного выше.Затем вам нужно избавиться от последних двух строк вывода, что намного сложнее, чем просто последняя.Вероятно, самое простое - грубая сила - запустите две копии sed '$d'
на выходе, но решение плохо масштабируется.В противном случае сохраните вывод в файле и используйте ed
или ex
для его редактирования.
Пример вывода:
SELECT * FROM customer WHERE
customer_num
::VARCHAR(64) = 'Raymond'
UNION
SELECT * FROM customer WHERE
fname
::VARCHAR(64) = 'Raymond'
UNION
SELECT * FROM customer WHERE
lname
::VARCHAR(64) = 'Raymond'
UNION
SELECT * FROM customer WHERE
company
::VARCHAR(64) = 'Raymond'
UNION
SELECT * FROM customer WHERE
address1
::VARCHAR(64) = 'Raymond'
UNION
SELECT * FROM customer WHERE
address2
::VARCHAR(64) = 'Raymond'
UNION
SELECT * FROM customer WHERE
city
::VARCHAR(64) = 'Raymond'
UNION
SELECT * FROM customer WHERE
state
::VARCHAR(64) = 'Raymond'
UNION
SELECT * FROM customer WHERE
zipcode
::VARCHAR(64) = 'Raymond'
UNION
SELECT * FROM customer WHERE
phone
::VARCHAR(64) = 'Raymond'
Когда вышеприведенный вывод подается во вторую копиюSQLCMD выдает:
105|Raymond|Vector|Los Altos Sports|1899 La Loma Drive||Los Altos|CA|94022|415-776-3249