-1

別のテーブル列の値である列を選択しています。このクエリの問題点

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')))

書き方は?

4

3 に答える 3

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)
于 2013-01-08T09:12:19.290 に答える
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.
    )
于 2013-01-08T09:01:17.410 に答える
0

tablenamecolumn の前に使用する必要がありますgeoname。のようにhgeo.geonamegeonamehgeoないを調べますflatgeoか?

于 2013-01-08T08:52:25.493 に答える