从sql中的两个表之一获取行

时间:2015-07-06 16:10:42

标签: sql

考虑两个表:TableA和TableB,列为, 表A - (col1a,col2a,col3a) 表B - (col1b,col2b,col3b)。 我有一个密钥,它存在于TableA或TableB中。根据表中任何一个键的存在,我必须查询相应表中的一个。是否可以使用sql?

2 个答案:

答案 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