考虑两个表:TableA和TableB,列为, 表A - (col1a,col2a,col3a) 表B - (col1b,col2b,col3b)。 我有一个密钥,它存在于TableA或TableB中。根据表中任何一个键的存在,我必须查询相应表中的一个。是否可以使用sql?
答案 0 :(得分:0)
您可以创建数据库函数并将密钥传递给函数,并在该函数中执行表选择和数据提取,而不是使用单个查询。
然后,您可以从代码中调用数据库函数。有关创建函数的信息,请参阅数据库手册,因为它们可以针对数据库进行优化。
答案 1 :(得分:0)
像这样的伪代码的问题在于,目前还不清楚数据的确切结构。你说密钥可以在任何一个表中,但你不清楚它是否可以在任何一个表中的3列中的任何一列中。您也不指示键或列的数据类型。另外,我建议不要使用这种简化的列名 - 除非那只是你的伪代码。
话虽如此,假设密钥可以存在于任一表中的任何列中,下面是一个示例,说明如何在两个表中的6列中的任何一列中联合多个SELECT语句来查找密钥。 DECLARE @TableA TABLE ( col1a VARCHAR(10) ,col2a VARCHAR(10) ,col3a VARCHAR(10) )
INSERT INTO @TableA
( col1a
, col2a
, col3a )
VALUES
('key1', 'key2', 'key3')
INSERT INTO @TableA
( col1a
, col2a
, col3a )
VALUES
('key4', 'key5', 'key6')
DECLARE @TableB TABLE
(
col1b VARCHAR(10)
, col2b VARCHAR(10)
, col3b VARCHAR(10)
)
INSERT INTO @TableB
( col1b
, col2b
, col3b )
VALUES
('key7', 'key8', 'key9');
INSERT INTO @TableB
( col1b
, col2b
, col3b )
VALUES
('key10', 'key11', 'key12');
DECLARE @SearchKey VARCHAR(10) = 'key6'
SELECT * FROM @TableA WHERE col1a = @SearchKey
UNION
SELECT * FROM @TableA WHERE col2a = @SearchKey
UNION
SELECT * FROM @TableA WHERE col3a = @SearchKey
UNION
SELECT * FROM @TableB WHERE col1b = @SearchKey
UNION
SELECT * FROM @TableB WHERE col2b = @SearchKey
UNION
SELECT * FROM @TableB WHERE col3b = @SearchKey