2011-06-15 2 views
1

다음은 'userid'또는 'user_id'열 이름을 가진 모든 테이블을 반환하는 간단한 sql 쿼리입니다.특정 열을 포함하지 않는 모든 테이블을 반환하는 쿼리

SELECT t.name 
FROM sys.tables t 
INNER JOIN sys.columns c ON t.object_id = c.object_id 
WHERE c.name LIKE 'userid' OR c.name LIKE 'user_id' 
ORDER BY name 

그러나, 제가 여기서 뭘하고 싶은 것은 '사용자 ID'칼럼 'USER_ID'열을 포함하지 않는 모든 테이블을 얻는 것입니다. 어떻게해야합니까?

P. NOT LIKE을 사용하면 테이블에 다른 다른 열이있는 경우 'userid'또는 'user_id'열이 포함 된 테이블을 다시 가져옵니다.

대단히 감사합니다.

또한 절

SELECT t.name FROM sys.tables t 
EXCEPT 
SELECT t.name 
FROM sys.tables t 
INNER JOIN sys.columns c ON t.object_id = c.object_id 
WHERE c.name IN ('userid', 'user_id') 
ORDER BY t.name 

이 두 쿼리를 제외하고는 귀하의 original 쿼리를 사용할 수 있습니다

SELECT 
    t.name 
FROM 
    sys.tables t 
WHERE 
    NOT EXISTS (SELECT * 
      FROM sys.columns c 
      WHERE t.object_id = c.object_id AND c.name IN ('userid', 'user_id')) 
ORDER BY 
    t.name 

편집 "더 열 사용자 ID가/USER_ID가 존재하지 않는 경우 테이블을"

답변

3

당신이 필요합니다 동일한 계획과 성능을 제공해야 함

+0

정말 감사합니다 그것을 포장 할 수있다. 둘 다 꽤 잘 작동했습니다. 특히 EXCEPT를 잘 사용합니다. – woodykiddy

2
SELECT name from sys.tables 
WHERE name not in (
    SELECT t.name 
    FROM sys.tables t 
    INNER JOIN sys.columns c ON t.object_id = c.object_id 
    WHERE c.name LIKE 'userid' OR c.name LIKE 'user_id' 
) 
1

당신은 하위 쿼리에서

Select t2.Name 
From sys.tables t2 
Where t2.Name Not In 
(
    SELECT t.name 
    FROM sys.tables t 
    JOIN sys.columns c ON t.object_id = c.object_id 
    WHERE c.name LIKE 'userid' OR c.name LIKE 'user_id' 
) 
ORDER BY t2.name 
관련 문제