我会很快。
问题:我的子查询返回多行(这是好的,因为它应该返回多个,或只返回一个),并触发ora错误1427,关闭查询结果
问题:如何显示此子查询的所有寄存器?
备注
我在互联网上的所有搜索都说你可以限制1,但这不是我真正想要的。
D表就像一个矩阵,我给FIELD4一个特定的值,它将FIELD返回给我。在同一个查询中,我对FIELD4有另一个值,并在FIELD上返回另一个类型和业务结果。
SELECT (SELECT B.Value
FROM TABLE_B B
WHERE B.FIELD1 = A.FIELD1
AND B.FIEL2 = A.FIELD2
AND B.FIELD3 = A.FIELD3
AND B.Category= 'Adress') AS RESULT_FIELD,
(SELECT B.Value
FROM TABLE_B B
WHERE B.FIELD1 = A.FIELD1
AND B.FIEL2 = A.FIELD2
AND B.FIELD3 = A.FIELD3
AND B.Category= 'Gender') AS RESULT_FIELD2
FROM TABLE_A A;
Table A
ID Name Age
1 Lapras 6
2 Lincon 45
Table B
ID A_ID Category Value
1 1 Gender Female
2 2 Gender Male
3 1 Adress Avenue one
4 1 Adress Avenue Two
5 2 Adress Avenue Eleven
正如你所看到的,它在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
答案 0 :(得分:3)
为什么要使用子查询?这是一个简单的JOIN
:
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';
答案 1 :(得分:2)
获得所需的结果(根据您的示例输入/输出)需要使用JOIN
,以及多个类别的一些逻辑。以下是使用您引用的两个类别(gender
和adress
)的一个可能示例:
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';
请注意,您最终得到了类别值的笛卡尔积。例如,如果有人为第一个类别输入了两个值(可能不是针对性别而是另一个),而第二个输入了两个值,则会得到4个结果 - 每个排列的结果(每个排列2个类别x 2个值)类别)。即便如此,这种查询方式似乎也是您正在寻找的。 p>