【发布时间】:2023-03-05 22:28:01
【问题描述】:
问题: 给定两个表: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_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'
【问题讨论】:
-
哪种风格的 SQL? MySql、Oracle TSQL 还是其他?