问题: 给定两个表: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包含attribtue名称和值,是跨多个表使用的公用表。每个表都由Attr_Type和ATTR_ID标识(它映射到不同表的ID) 例如,表A中ID为1的记录在表B中有两个属性,其中包含Attr_Names: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'
答案 0 :(得分:0)
我没有SQL服务器来测试命令,但你想要的是内/外连接查询。你可以做这样的事情
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'
像这样的东西应该为你做的伎俩
答案 1 :(得分:0)
这是一个奇怪的数据结构。您需要left outer join
,其中包含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_type
条件,因为这似乎是这个数据结构的逻辑。