有沒有辦法只選擇名稱不在另一個表上的列?例如選擇名稱不在另一個表中的列
Table A Column B
ID | Name | Address Address
-----------------------
1 | Daniel | dummy
在這個例子中我的select語句應該是這樣的:
select ID, Name from Column A
我見過人們談論的動態SQL,但我無法找到一個體面的例子來解決我的問題,任何幫助深表感謝。
有沒有辦法只選擇名稱不在另一個表上的列?例如選擇名稱不在另一個表中的列
Table A Column B
ID | Name | Address Address
-----------------------
1 | Daniel | dummy
在這個例子中我的select語句應該是這樣的:
select ID, Name from Column A
我見過人們談論的動態SQL,但我無法找到一個體面的例子來解決我的問題,任何幫助深表感謝。
這裏,你會做到這一點使用動態SQL的方式的版本:
declare @cols varchar(max);
set @cols = NULL;
select @cols = coalesce(@cols + ', ' + column_name, column_name)
from information_schema.columns ca
where ca.table_name = 'A' and
ca.column_name not in (select cb.column_name
from information_schema.columns cb
where cb.table_name = 'B'
);
declare @sql varchar(max);
set @sql = 'select [cols] from A';
set @sql = replace(@sql, '[cols]', @cols);
exec sp_executesql @sql;
這是一個有點簡單化,顯示information_schema
表是如何被起訴。它在很多情況下都能正常工作,但並不是最普通的:
選擇WHERE
子句中的其他表。
SELECT ID, NAME
FROM ColumnA
WHERE NAME NOT IN (SELECT NAME FROM COLUMNB)
我不認爲這是OP想要的。我認爲OP希望選擇'ID'和'NAME'列,不包括'ADDRESS',因爲'ADDRESS'出現在另一個表中。 –
我想你錯過了我,我期望的結果是@TimBiegeleisen如何解釋。 –
爲什麼你需要這個? –
列B是配置列。我正在處理大量的文件導出系統,並且允許用戶插入要從文件中排除的列。因此需要動態讀取表A中所需的列(那些用戶沒有排除的列)。不幸的是,我不能在文件導出系統上做一個過濾器,因爲它已經成立。 –
您還沒有使用數據庫進行標記。我們無法讀懂你的想法。 –