2014-10-16 6 views
1
create table TABLE1(
column1 varchar (100), 
column2 varchar (100) 
) 
go 
create table TABLE2(
column_for_compare varchar (100) 
) 
go 
insert into TABLE2 values ('column1') 
insert into TABLE2 values ('column2') 
go 

Я хочу, чтобы проверить, если имя Table1 столбцов существует в TABLE2, что-то вроде этого: --This следует сравнивающему значение строки в TABLE2 с именами столбцов в TABLE1Как сравнить строку с столбцом?

, если существует (выберите column_for_compare из TABLE2) и , если существует (выберите column_name из ключа syscolumn присоединиться systable где table_name = «TABLE1») начинают печать «матч найден» конец

я надеюсь, что вы можете увидеть, что им пытаются ... если нет ... если попытается объяснить это лучше

ответ

1

Вы можете запросить таблицу USER_TAB_COLUMNS, чтобы получить имена collumn

SELECT column_name 
FROM USER_TAB_COLUMNS 
WHERE table_name = 'TABLE1' 

, а затем присоединиться результат с TABLE2

SELECT * 
FROM TABLE2, (SELECT column_name 
       FROM USER_TAB_COLUMNS 
       WHERE table_name = 'TABLE1') as cNames 
WHERE TABLE2.column_for_compare=cNames.column_name 

Это поможет вам таблицу с именами collumn в table_1, которые существуют в строках таблицы_2

0

Этот запрос возвращает только значения в таблице 2, которые являются столбцами в таблице 1. Вы не смогли бы использовать PRINT «Match Found», не меняя запрос, так как вам нужно будет либо перебирать каждую строку в TABLE2, либо изменять запрос, чтобы вы делали сравнение для ВСЕХ значений в таблице 2.

SELECT 
    * 

FROM 
    TABLE2 
    JOIN INFORMATION_SCHEMA.COLUMNS 
     ON TABLE2.column_for_compare = COLUMNS.COLUMN_NAME 

WHERE 
    COLUMNS.TABLE_NAME = 'TABLE1' 
Смежные вопросы