所以我有一张包含我想要的信息的表
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 :(得分: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中没有行。