我有幾個表 aSequence作為主鍵。
它們根本不相關,沒有外鍵或任何東西,或任何可以將一個鏈接到另一個的東西,所以join不起作用。
Union 也不會作業,因為它們基本上是不同的表。
我知道您可以將“null”分配給存在于一個表中而不是另一個表中的那些列,如果是這種情況,我可以將所有內容都放入一個帶有“稀疏列”的大表中,但我只是“個人”不這樣做就像一個有太多空值的表。
他們得到的唯一關系是他們共享一個 Sequence 作為主鍵,所以他們都有一個唯一的主鍵,甚至彼此之間。
那么,我如何“有效地”在所有這些表中搜索我正在尋找的唯一主鍵,而不是在每個表中進行選擇,直到回傳非空結果?
非常感謝您的幫助!
uj5u.com熱心網友回復:
如果它適合您,動態查詢的內容可能如下所示:
create table tableA ( id int, col1 char ,col2 char );
create table tableB ( id int, col3 int ,col4 int );
create table tableC ( id int, col5 bit ,col6 bit );
insert tableA values (1, 'a', 'b');
insert tableB values (2, 2, 2);
insert tableC values (3, 0, 1);
declare @sql nvarchar(max);
with cte_union AS
(
select id, 'tableA' as t from tableA
union all
select id, 'tableB' from tableB
union all
select id, 'tableC' from tableC
)
select @sql = 'SELECT * FROM ' t ' WHERE id = ' CAST(id AS nvarchar(MAX))
from cte_union
where id = 1; --your @id param
exec sp_executesql @sql;
uj5u.com熱心網友回復:
如果您只是想查找哪個表具有 ID?
然后你可以用LEFT JOIN每個表來查詢一個編號。
SELECT q.id
, COUNT(a.id) AS A
, COUNT(b.id) AS B
, COUNT(c.id) AS C
, COUNT(d.id) AS D
FROM (select 123 as id) q
LEFT JOIN tableA a ON a.id = q.id
LEFT JOIN tableB b ON b.id = q.id
LEFT JOIN tableC c ON c.id = q.id
LEFT JOIN tableD d ON d.id = q.id
GROUP BY q.id
然后從具有 id 的表中選擇。
Fe 上面的查詢可能會回傳如下結果:
q A B C D
------ ---- ---- ---- ----
123 0 1 0 0
所以 TableB 會有 id = 123
uj5u.com熱心網友回復:
如果“有效”是指性能,則回圈遍歷所有表并在結果集不為空時中斷。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/353889.html
標籤:sql sql-server 查询语句
