使用PL SQL使用CONDITION从不同的表中进行选择

时间:2017-07-03 17:00:56

标签: sql oracle

所以我有一张包含我想要的信息的表

TABLE_1
id
name

还有许多其他具有相同数据类型的表

TABLE_x
id
order

TABLE_y
id
order

...

TABLE_z
id
order

我想要什么:取决于 TABLE_1 中的名称,我想访问其他表格的att命令。

示例:

TABLE_1
name = x

我想访问TABLE_x并检查订单。 但是如果

TABLE 1
name = z

我想访问TABLE_z等。

我想到了这件事:

SELECT *
FROM TABLE_1
INNER JOIN (
CASE (SELECT name FROM TABLE_1) 
WHEN 'x' THEN TABLE_x on TABLE_1.id=TABLE_x.id
WHEN 'y' THEN TABLE_y on TABLE_1.id=TABLE_y.id
WHEN 'z' THEN TABLE_z on TABLE_1.id=TABLE_z.id)

我不能在这里使用case语句。

需要你的帮助!

1 个答案:

答案 0 :(得分:0)

我不建议紧随其后,但仔细研究一个可能的解决方案:

-- NOT RECOMMENDED...
WITH t1 AS (
    SELECT MIN(name) name FROM table_1
)
SELECT table_x.ordr FROM t1 JOIN table_x ON ('x' = t1.name)
UNION ALL
SELECT table_y.ordr FROM t1 JOIN table_y ON ('y' = t1.name)
UNION ALL
SELECT table_z.ordr FROM t1 JOIN table_z ON ('z' = t1.name)
/

如果您考虑数据库需要做什么来满足该查询,您将意识到它是大量的单个查询,其中至多有一个返回数据。 那可能是很多工作,这就是为什么不推荐它。对table_1运行初始查询可能会好得多,结果会驱动后续查询的目标。使用sqlplus,您可以选择以下内容:

COLUMN name NEW_VALUE name NOPRINT
SELECT MIN(name) name FROM table_1
/
SELECT ordr FROM table_&&name
/

请考虑错误情况,例如查询1中的名称与任何现有表不匹配,或者table_1中没有行。