一个查询到另一个查询的结果

时间:2014-06-27 17:09:55

标签: sql oracle nested

我有两张桌子 带有列名的TABLE_A COLUMN1 COLUMN2 COLUMN3 COLUMN4 COLUMN5 并且有数据

abc def ghi jkl mno

123 456 789 001 121

TABLE_B with columnname COLUMN6 COLUMN7 ,其数据为

COLUMN5 124

COLUMN4 bca

COLUMN3 aaa

COLUMN5 bbb

所以我将Table_A的列名作为table_B中的数据

所以我想在一个查询中做这样的事情

$ query1 =从TABLE_B中选择COLUMN6,其中COLUMN7 ='aaa';

$ query2 =从TABLE_A中选择$ query1,其中COLUMN1 ='123';

由于

2 个答案:

答案 0 :(得分:0)

您需要有一个值来匹配表a - >到表B. 如果它看起来像这样:

表A - > id,名称
表B - > id,table_a_id,name

此查询将起作用:

SELECT a.name, b.name
FROM tableA as a
JOIN tableB as b ON a.id=b.table_a_id AND b.name='123'
WHERE a.name='aaaa'

获取表A和B的名称。我在这里使用表名的别名,以便于阅读。我希望,通过这个例子,这将回答你的问题。

如果您没有任何匹配的值,但希望跨越所有列,则可以执行以下操作:

SELECT a.name, b.name
FROM tableA a, tableB b
WHERE a.name='aaa' AND b.name='123'

答案 1 :(得分:0)

您可以使用CASE或DECODE来执行此操作:

select a.* from tableA a, tableB b
WHERE
b.column7 = 'aaa'
and case
when b.column6 = 'COLUMN1' then a.column1
when b.column6 = 'COLUMN2' then a.column2
when b.column6 = 'COLUMN3' then a.column3
when b.column6 = 'COLUMN4' then a.column4
when b.column6 = 'COLUMN5' then a.column5
else null end = '123' -- condition for tableA

您可以将此语句最多填充1000列(ORACLE硬限制):)