2011-08-04 39 views
1

我遇到了以下問題。我的表(geo_table)結構如下:這些表中不同表的使用動態生成的表名來選擇

foreign_table_id | foreign_table_name | some_other_fields... 

foreign_table_name商店名稱和門店foreign_table_id IDS。我想要做的是檢查上述表中的行是否存儲對其他表的有效引用。因此,我需要從外部表中選擇一行,該行的名稱基於存儲在foreign_table_name中的字符串。我的代碼沒有工作,因爲它有語法錯誤,但它清楚地呈現我想要實現:

SELECT foreign_table_id, foreign_table_name FROM `geo_table` gt 
WHERE (
    SELECT COUNT(*) FROM gt.foreign_table_name AS t 
    WHERE gt.foreign_table_id = t.uid 
) > 0 

任何幫助,將不勝感激

回答

3

如果你知道所有可能的表名,那麼你可以使用條件語法來實現它:

SELECT foreign_table_id, foreign_table_name FROM `geo_table` gt 
WHERE 
    CASE gt.foreign_table_name 
     WHEN 'table1' THEN 
      EXISTS (
       SELECT * FROM table1 
       WHERE id = gt.foreign_table_id 
      ) 
     WHEN 'table2' THEN 
      EXISTS (
       SELECT * FROM table2 
       WHERE id = gt.foreign_table_id 
      ) 
     ELSE 
      FALSE 
    END 
4

這應該是動態完成的:

declare @tablename varchar(50) 
set @tablename = 'test' 
declare @sql varchar(500) 
set @sql = 'select * from ' + @tablename 
exec @sql 
+0

謝謝你,muc H。有一件事我需要問一下。我如何放置此代碼?在內部查詢的開始? –

+1

這應該是動態完成的!執行整個查詢的唯一方法是通過存儲過程 –

相關問題