2013-01-08 147 views
-1

選擇欄這是另一種表列value.what不對的查詢選擇這是另一個表列值

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

你想做什麼? – Bridge

回答

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. 
    ) 
0

您應該在列geoname之前使用tablename。像hgeo.geoname。 你想知道hgeogeoname是不是在flatgeo

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) 
相關問題