我有 3 个表,为了本练习的目的,我们将它们称为:产品、价格和折扣。仅当在 Discount.ProductID(折扣表中的 ProductID 列)中找到 ProductID 时,我才尝试加入 Products 和 Price 表。
产品:
| 产品ID | 尺寸 | 颜色 | 参考号# |
|---|---|---|---|
| A1234 | 小的 | 蓝光 | 0C94 |
| B5678 | 医学 | 红色的 | 1D96 |
价格:
| 参考号# | 根据 | 税 |
|---|---|---|
| 0C94 | 3.48 | 0.96 |
折扣:
| 产品ID | 列表 | 地点 |
|---|---|---|
| A1234 | 二 | 三 |
我熟悉联接,所以我的代码开始为:
SELECT * FROM Product as a
left join Price as b
on a.Ref# = b.Ref#
Run Code Online (Sandbox Code Playgroud)
但我从未在基于第三个表的 where 子句中嵌套约束(如果这甚至是正确的方法)。任何建议将不胜感激。最终结果将是一个仅显示一种产品的新产品表,因为 ProductID B5678 不在 Discount 表中。
我试图弄清楚如何从表中选择行的子集,并为每个“父”字符串选择最长的唯一字符串。我将在下面提供表格示例以及我的不起作用的代码。
当前表:
| 姓名 | 销售价格 |
|---|---|
| 北美\美国\东北部\纽约 | 8576 |
| 北美\美国\东北 | 2598 |
| 南美洲\巴西 | 1348 |
| 南美洲\智利\东北 | 9726 |
| 南美洲\智利 | 4412 |
| 北美\加拿大\安大略省 | 3894 |
| 北美\加拿大 | 6321 |
期望的输出:
| 姓名 | 销售价格 |
|---|---|
| 北美\美国\东北部\纽约 | 8576 |
| 南美洲\巴西 | 1348 |
| 南美洲\智利\东北 | 9726 |
| 北美\加拿大\安大略省 | 3894 |
最初,我认为我可以根据反斜杠的数量应用某种形式的逻辑(
example: SELECT * FROM TestTable WHERE Name LIKE '%\\%'
Run Code Online (Sandbox Code Playgroud)
)。然而,这种逻辑不起作用,因为某些名称最远的分支可能只有 1 个反斜杠,而其他名称可能有 3 个以上。
生成测试表的代码如下,任何帮助/建议将不胜感激
create table t1(
[name] varchar(60),
[saleprice] int );
insert into t1 values ('NorthAmerica\US\Northeast\NewYork',8576);
insert into t1 values ('NorthAmerica\US\Northeast',2598);
insert into t1 values ('SouthAmerica\Brazil',1348);
insert into t1 values ('SouthAmerica\Chile\NorthEast',9726);
insert into t1 values ('SouthAmerica\Chile',4412);
insert into …Run Code Online (Sandbox Code Playgroud)