2012-11-06 39 views
0

看到了很多關於基於價值觀,但沒有分析數據類似的帖子完全是我想從一個包含列名稱一個表得到的結果列另一張桌子。例如:SQL - 從表選擇列,其中另一個表列的值等於列名列表

Select [col1], [col2] 
from Table1 
where (select changes as (col#) 
     from table2) 

col#是我希望從Table1獲得的列名的列表。 Table2的變化列是一個逗號分隔的列表。我想找一種方法可以從Table2的列表中獲取Table1中的每列。任何幫助是極大的讚賞。

+0

任何解決方案都是數據庫特定的。您使用的是什麼RDMS? – Alex

+0

您需要提供您正在使用的數據庫供應商。你需要將'changes'中的值分成幾行。 – codingbiz

回答

0

您必須即時創建查詢。您可以通過這樣做:

  1. 首先從changes列中的數據提取到您的調用應用程序,然後從該數據組裝一個SQL查詢字符串並執行它,或
  2. 創建內存儲的動態聲明程序和EXEC(或任何您的RDBMS的等效聲明)。

請務必注意,如果changes中的數據來自用戶輸入,那麼您將處於一個受到傷害的世界。

如果你對模式有控制權,我建議避免這種存儲數據的方式。一般來說,逗號分隔列表只是笨拙的,從根本上違背了數據庫設計的目的。對於每個列可以更改(id, col1_changed, col2_changed)或每個更改列(id, changed_col_name)的單個布爾值的更改表結構在正常查詢中使用會更容易。

相關問題