Oracle 连接两个表的复杂SQL查询

Oracle 连接两个表的复杂SQL查询,oracle,sqlplus,Oracle,Sqlplus,问题: 给定两个表:TableA,TableB,其中TableA与TableB有一对多关系,我想检索TableB中搜索条件与TableB中某一列匹配的所有记录,并为同一属性的唯一TableA记录返回NULL 表结构: 表A ID(Primary Key) | Name | City 1 | ABX | San Francisco 2 | ASDF | Oa

问题: 给定两个表:TableA,TableB,其中TableA与TableB有一对多关系,我想检索TableB中搜索条件与TableB中某一列匹配的所有记录,并为同一属性的唯一TableA记录返回NULL

表结构:

表A

ID(Primary Key)      | Name          | City
1                    | ABX           | San Francisco
2                    | ASDF          | Oakland
3                    | FDFD          | New York
4                    | GFGF          | Austin
5                    | GFFFF         | San Francisco
表B

ATTR_ID              |Attr_Type      | Attr_Name            | Attr_Value
1                    | TableA        | Attr_1               | Attr_Value_1
2                    | TableD        | Attr_1               | Attr_Value_2
1                    | TableA        | Attr_2               | Attr_Value_3
3                    | TableA        | Attr_4               | Attr_Value_4
9                    | TableC        | Attr_2               | Attr_Value_5
表B包含属性名称和值,是跨多个表使用的常用表。每个表都由Attr_Type和Attr_ID(映射到不同表的ID)标识。
例如,表A中ID为1的记录在表B中有两个属性,属性名为Attr_:Attr_1和Attr_2,依此类推

预期产出

ID                   | Name          | City             | TableB.Attr_Value
1                    | ABX           | San Francisco    | Attr_Value_1
2                    | ASDF          | Oakland          | Attr_Value_2
3                    | FDFD          | New York         | NULL
4                    | GFGF          | Austin           | NULL
5                    | GFFFF         | San Francisco    | NULL
搜索条件: 从表B中获取表A中具有ATTR_NAME ATTR_1的每条记录的行。如果特定的TableA记录没有Attr_1,则返回null

我的查询

select id, name, city,
    b.attr_value from table_A
    join table_B b on
    table_A.id =b.attr_id and b.attr_name='Attr_1'

我没有sql server来测试该命令,但您需要的是一个内部/外部连接查询。你可以这样做

select id, name, city,
    b.attr_value from table_A
    join table_B b on
    table_A.id *= b.attr_id and b.attr_name *= 'Attr_1'

像这样的东西应该能帮你解决这个问题

这是一个奇怪的数据结构。您需要一个
左外部联接
,其条件在
on
子句中:

select a.id, a.name, a.city, b.attr_value
from table_A a left join
     table_B b
     on a.id = b.attr_id and b.attr_name = 'Attr_1' and b.attr_type = 'TableA';

我添加了
attr\u type
条件,因为这似乎符合此数据结构的逻辑。

哪种风格的SQL?MySql、Oracle TSQL还是其他?