Oracle 连接两个表的复杂SQL查询
问题: 给定两个表:TableA,TableB,其中TableA与TableB有一对多关系,我想检索TableB中搜索条件与TableB中某一列匹配的所有记录,并为同一属性的唯一TableA记录返回NULL 表结构: 表AOracle 连接两个表的复杂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
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还是其他?