【问题标题】:Fetch row from one of the two tables in sql从sql中的两个表之一中获取行
【发布时间】:2015-07-06 16:10:42
【问题描述】:

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

【问题讨论】:

  • 什么数据库?如果该行在两个表之间是互斥的,请使用 UNION 子句。
  • 当然,您可以分别查询每个表并查看在哪里找到记录,但我认为您的问题是您想在单个查询中完成...对吗?跨度>
  • 是的,在单个查询中。数据库:甲骨文。我正在尝试在 table3 中插入​​值,其值可能来自 table1 或 table2 以及我拥有的键。注意:key 存在于其中一个表中,而不是两个表中,所以不要担心边缘情况

标签: sql


【解决方案1】:

您可以创建一个数据库函数并将密钥传递给该函数,然后在该函数中执行表选择和数据提取,而不是使用单个查询。

在此之后,您可以从代码中调用数据库函数。请参考数据库手册创建函数,因为它们可以针对数据库进行优化。

【讨论】:

  • 我在单个查询中需要这个,而不是函数。
【解决方案2】:

这样的伪代码的问题在于,不清楚您的数据的确切结构。您说键可以在任一表中,但您不清楚它是否可以在任一表的 3 列中的任何一个中。您也没有指明键或列的数据类型。此外,我建议不要使用这种简化的列名——除非那只是你的伪代码。

话虽如此,假设键可以存在于任一表的任何列中,下面是一个示例,说明如何联合多个 SELECT 语句在两个表的 6 列中的任何一个中查找键。 声明@TableA 表 ( 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多