Sql 单行子查询返回多行实数解
我会很快的 问题:我的子查询返回多行(这是可以的,因为它应该返回多行,或者只返回一行),并触发ora错误1427,关闭查询结果 问题:如何显示此子查询的所有寄存器 注释Sql 单行子查询返回多行实数解,sql,oracle,Sql,Oracle,我会很快的 问题:我的子查询返回多行(这是可以的,因为它应该返回多行,或者只返回一行),并触发ora错误1427,关闭查询结果 问题:如何显示此子查询的所有寄存器 注释 我在互联网上的所有搜索都说你可以限制1,但这不是我真正想要的 D表就像一个矩阵,我给FIELD4一个特定的值,它返回给我FIELD。在同一个查询中,我对FIELD4有另一个值,并在FIELD上返回另一个类型和业务结果 表格示例: 如您所见,它在B上有多个寄存器,考虑到我传递类别colunm的条件,我需要在结果表上显示所有
- 我在互联网上的所有搜索都说你可以限制1,但这不是我真正想要的
- D表就像一个矩阵,我给FIELD4一个特定的值,它返回给我FIELD。在同一个查询中,我对FIELD4有另一个值,并在FIELD上返回另一个类型和业务结果
表格示例:
如您所见,它在B上有多个寄存器,考虑到我传递类别colunm的条件,我需要在结果表上显示所有地址 代码更新* 结果应该是:
ID Name Age Gender Adress
1 Lapras 6 Female Avenue one
1 Lapras 6 Female Avenue two
2 Lincon 45 Male Avenue eleven
为什么要使用子查询?这是一个简单的
连接
:
SELECT B.FIELD as RESULT_FIELD
FROM TABLE_A A JOIN
TABLE_B B
ON B.FIELD1 = A.FIELD1 AND
B.FIEL2 = A.FIELD2 AND
B.FIELD3 = A.FIELD3 AND
B.FIELD4 = 'SOMETHING';
为什么要使用子查询?这是一个简单的
连接
:
SELECT B.FIELD as RESULT_FIELD
FROM TABLE_A A JOIN
TABLE_B B
ON B.FIELD1 = A.FIELD1 AND
B.FIEL2 = A.FIELD2 AND
B.FIELD3 = A.FIELD3 AND
B.FIELD4 = 'SOMETHING';
要获得所需的结果(根据示例输入/输出),需要使用
JOIN
,以及多个类别的一些逻辑。下面是一个可能的示例,使用您引用的两个类别(gender
和address
):
请注意,最终得到的是类别值的笛卡尔积。例如,如果有人为第一个类别输入了两个值(可能不是性别,而是另一个),为第二个类别输入了两个值,那么您将返回4个结果-每个排列的结果(每个类别中2个类别x 2个值)。即便如此,这种类型的查询似乎正是您所需要的。要获得所需的结果(根据您的示例输入/输出),需要使用
JOIN
,以及多个类别的一些逻辑。下面是一个可能的示例,使用您引用的两个类别(gender
和address
):
请注意,最终得到的是类别值的笛卡尔积。例如,如果有人为第一个类别输入了两个值(可能不是性别,而是另一个),为第二个类别输入了两个值,那么您将返回4个结果-每个排列的结果(每个类别中2个类别x 2个值)。即便如此,这种类型的查询似乎正是您所需要的。对不起,我没有提到D表就像一个矩阵,我给了FIELD4一个特定的值,它将FIELD返回给我。在同一个查询中,我对FIELD4有另一个值,并在FIELD上返回另一个类型和业务结果。我不知道这些信息是否相关,或者解决方案是否像你提到的那样简单。谢谢您的查询正在为基表(表A)中的N条记录返回N个结果。子查询不能用于创建其他行-这意味着对于表_A的每一行,子查询必须为基表中的N行中的每一行返回一个值。也许我们误解了您想要的结果-您能提供一些示例输入和预期输出吗?对于表A中的每一行,您希望“矩阵”(表B)中的所有匹配值都分散在多列中,还是什么?很抱歉,我没有提到D表就像一个矩阵,我给了字段4一个特定的值,它将字段返回给我。在同一个查询中,我对FIELD4有另一个值,并在FIELD上返回另一个类型和业务结果。我不知道这些信息是否相关,或者解决方案是否像你提到的那样简单。谢谢您的查询正在为基表(表A)中的N条记录返回N个结果。子查询不能用于创建其他行-这意味着对于表_A的每一行,子查询必须为基表中的N行中的每一行返回一个值。也许我们误解了您想要的结果-您能提供一些示例输入和预期输出吗?对于表_A中的每一行,您希望“矩阵”(表_B)中的所有匹配值都分散在多个列中,还是什么?您的查询(您自己承认它不能满足您的要求)无助于理解您的需求。请展示一个小的,由你的输入表组成的样本,一个你的输出样本(如果你不能用其他方法,请用手),以及从一个到另一个的逻辑。然后,展示你在解决方案上的尝试总是很重要的(根据论坛规则,可能是必需的),并解释什么不起作用。您已经完美地涵盖了最后一部分,但没有涵盖第一部分。谢谢你的询问(你自己承认这并不能满足你的需求)对理解你的需求毫无帮助。请展示一个小的,由你的输入表组成的样本,一个你的输出样本(如果你不能用其他方法,请用手),以及从一个到另一个的逻辑。然后,展示你在解决方案上的尝试总是很重要的(根据论坛规则,可能是必需的),并解释什么不起作用。您已经完美地涵盖了最后一部分,但没有涵盖第一部分。谢谢
SELECT B.FIELD as RESULT_FIELD
FROM TABLE_A A JOIN
TABLE_B B
ON B.FIELD1 = A.FIELD1 AND
B.FIEL2 = A.FIELD2 AND
B.FIELD3 = A.FIELD3 AND
B.FIELD4 = 'SOMETHING';
SELECT A.ID, A.Name, A.Age, B1.Value as Gender, B2.Value as Address
FROM TABLE_A A
LEFT OUTER JOIN TABLE_B B1 ON B1.A_ID = A.ID AND B1.Category = 'Gender'
LEFT OUTER JOIN TABLE_B B2 ON B2.A_ID = A.ID AND B2.Category = 'Adress';