【发布时间】:2020-10-07 14:21:41
【问题描述】:
我需要编写一个涉及下面两个示例表的复杂查询,我正在努力理解如何正确构建查询。
表格结构如下,连同样本数据:
Table 1:
ID | Type | Size
A123 | Block | Medium
C368 | Square | Large
X634 | Triangle | Small
K623 | Square | Small
Table 2:
ID | Code | Description | Price
A123 | C06 | Sensitive Material | 99.99
A123 | H66 | Heavy Grade | 12.76
A123 | U74 | Pink Hue | 299.99
C368 | H66 | Heavy Grade | 12.76
C368 | G66 | Green Hue | 499.99
C368 | C06 | Sensitive Material | 99.99
C368 | K79 | Clear Glass | 59.99
X634 | G66 | Green Hue | 499.99
X634 | K79 | Clear Glass | 59.99
X634 | Z63 | Enterprise Class | 999.99
K623 | K79 | Clear Glass | 59.99
K623 | G66 | Green Hue | 499.99
K623 | X57 | Extra Piping | 199.99
查询应主要基于表 1 中的 Type 列,然后加入表 2 的 ID 列。查询的目标是搜索表 1 中具有特定 @987654325 的所有 ID表 2 中的 @ 列组合。
对于 Type = Square AND both (Code = G66 AND Code = K79),最终输出应该是这样的表格:
ID
C368
K623
应该返回这两个 ID,因为它们在上面的伪查询中都有 BOTH 选项代码。
如何使用这两个表组合这个结果?以下是我编写的两个初始查询 - 都不会产生正确的结果。如您所见,我已尝试使用 IN 运算符和 =/AND/OR 运算符。
尝试 1(似乎可以使用 ONE 代码,但不能使用 > 1 代码):
select distinct ID
from
(
SELECT shapes.ID, details.code, details.description
FROM db.table2 details
JOIN db.table1 shapes
ON details.VIN = shapes.VIN
WHERE shape.type='Square'
) src
where code IN ("G66", "K79")
-- where code = "G66" AND code = "K79" (Produces zero results)
-- where code = "G66" OR code = "K79" (Produces incorrect results)
尝试 2(似乎适用于 ONE 代码,但不适用于 > 1 个代码):
SELECT distinct ID
FROM db.table2 details
WHERE ID IN
(
SELECT ID FROM db.table1 shapes
WHERE shapes.type='Square'
) AND code IN ("G66", "K79")
-- AND code = "G66" AND code = "K79" (produces zero results)
-- AND code = "G66" OR code = "K79" (Produces incorrect results)
谢谢
【问题讨论】:
-
Table1 包含 Type 列,用于在从 Table2 收集其他详细信息之前按类型过滤 ID。