【问题标题】:Result of one query into another query一个查询到另一个查询的结果
【发布时间】:2014-08-18 21:20:32
【问题描述】:

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

abc def ghi jkl mno

123 456 789 001 121

带有列名的 TABLE_B COLUMN6 COLUMN7 数据为

第 5 列 124

COLUMN4 bca

COLUMN3 aaa

COLUMN5 bbb

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

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

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

$query2= select $query1 from TABLE_A where COLUMN1='123';

谢谢

【问题讨论】:

  • 你为什么要这样做?如果第一个查询返回空白怎么办? ..它会破坏第二个查询。
  • 您能否更详细地解释一下您要做什么?你能发布想要的输出吗?
  • Query1 会给我 TABLE_A 的列名,所以它不会变成空白
  • Query1 将输出为 COLUMN3,Query2 将从 TABLE_A 中选择 COLUMN3,其中 COLUMN1='123' 并给我结果 789
  • 听起来您需要将这两个 SQL 语句包装在一种编程语言周围,并让它动态生成第二个 SQL 语句。生成动态 SQL 通常是不可取的,但这听起来像您要问的那样。

标签: sql oracle nested


【解决方案1】:

您可以使用 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 硬限制):)

【讨论】:

    【解决方案2】:

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

    TableA -> id,名称
    TableB -> 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'
    

    【讨论】:

    • 我无法使用您提供的内容,因为我不知道该转到哪一列。正如我在示例数据中给出的那样,query1 将给我三列之一作为结果 COLUMN3 或 COLUMN4 或 COLUMN5,然后只有我可以转到 table_A 并查询该表
    • 我不认为你想要做什么。
    猜你喜欢
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 2021-10-28
    • 2010-10-31
    • 1970-01-01
    相关资源
    最近更新 更多