选择列是另一个表列值

时间:2013-01-08 05:58:46

标签: sql sql-server-2008-r2

选择另一个表列值的列。此查询错误

select 
    geoName 
from 
    hgeo h 
where 
    geoName not in (select (select column_name 
                            from information_schema.columns 
                            where ((column_name = h.levelName) and (table_Name = 'flatgeo'))) 
                    from flatgeo)

我认为存在一些问题

(select 
     (select column_name 
      from information_schema.columns 
      where ((column_name = h.levelName) and (table_Name = 'flatgeo')))

怎么写呢?

3 个答案:

答案 0 :(得分:1)

您无法使用元信息来更改查询的形状。除非你想沿着动态的sql路径(可能很快变得复杂),我会去寻找以下内容:

SELECT
    geoName
FROM hgeo h
WHERE
    NOT EXISTS (SELECT * FROM flatgeo f
      WHERE
      (h.levelName = 'value1' and f.value1 = h.geoName) OR
      (h.levelName = 'value2' and f.value2 = h.geoName)
      //Repeat for each possible levelName value.
    )

答案 1 :(得分:1)

你可以试试这个

select GeoName from HGeo where HGeo.GeoName not in 
(select FlatGeo.value1 from FlatGeo union
select FlatGeo.value2 from FlatGeo union
select FlatGeo.value3 from FlatGeo)

答案 2 :(得分:0)

您应该在列tablename之前使用geoname。像hgeo.geoname一样。 要查找不在geoname的{​​{1}} hgeo吗?