2017-07-03 27 views
-1

不同的表,所以我有一个信息表,我想选择使用条件使用PL SQL

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语句。

需要你的帮助!

+0

我们不是一个代码写作服务。请参考[如何提出一个好问题?](https://stackoverflow.com/help/how-to-ask)。你有没有试过做任何研究?你有什么尝试?这里的问题应该有一个明确的问题/问题,显示的研究和[最小,完整和可验证](https://stackoverflow.com/help/mcve)示例。 – GrumpyCrouton

回答

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没有行。

+0

谢谢您的回复!我会检查。 – user1958622