gpt4 book ai didi

SQL 改进 - UNION?

转载 作者:行者123 更新时间:2023-12-02 08:10:45 28 4
gpt4 key购买 nike

我有 2 个表:“packages”和“items”。

packages”有以下列:pack_id | item_id

items”有以下列......:item_id |输入

一个可以有多个 项目

更新:

示例数据和预期结果:

pack_id | item_id
1 1
1 2
1 3
2 2
2 1
3 4
3 5
3 6

item_id | type
1 C
2 F
3 Z
4 Z
5 Z
6 Z

预期结果:

pack_id | pack_type
1 Mixed
2 Cool
3 Not Cool

我的问题是:

是否有更好的方法来查询这 2 个表,以获得第三个表,其中包含列:“pack_id”和新列“pack_type”?这些 UNION 似乎给运行时间增加了大量时间。

    SELECT pack_id, pack_type
FROM (
-- CASE 1 - pack_type is 'Cool' - type 'C' or 'F', but not 'Z'
SELECT Distinct q1.pack_id, 'Cool' AS pack_type
FROM (
SELECT Distinct p.pack_id, i.type
FROM packages p
INNER JOIN items i
ON p.item_id = i.item_id
WHERE i.type <> 'Z') q1
WHERE q1.type IN ('C','F')

UNION

-- CASE 2 - pack_type is 'Not-Cool' - type 'Z', but not 'C' or 'F'
SELECT Distinct q2.pack_id, 'Not-Cool' AS pack_type
FROM (
SELECT Distinct p.pack_id, i.type
FROM packages p
INNER JOIN items i
ON p.item_id = i.item_id
WHERE i.type = 'Z') q2
WHERE q2.type NOT IN ('C','F')

UNION

-- CASE 3 - pack_type is 'Mixed' - type 'Z' and ('C' or 'F')
SELECT Distinct q3.pack_id, 'Mixed' AS pack_type
FROM (
SELECT Distinct p.pack_id, i.type
FROM packages p
INNER JOIN items i
ON p.item_id = i.item_id
WHERE i.type = 'Z') q3
WHERE q3.type IN ('C','F')
) m

注意:对指向“A type cannot be Z and also C or F”的多个注释的一些解释。

我也这么认为,但我理解查询行为的方式是,如果您说“键入 IN ('C','F')”,它将查看类型为“C”或“F' 并获取包含该项目的包 ID。但是,包含“C”或“F”类型项目的包也可以包含“Z”类型项目,因此内部选择首先处理“Z”类型项目。

最佳答案

也许我误解了什么,但这不是你真正想要的:

SELECT DISTINCT 
pack_id,
pack_type = CASE WHEN i.type IN ('C','F') THEN 'Cool'
WHEN i.type IN ('Z') THEN 'Not-Cool'
ELSE 'Mixed' END
FROM packages p INNER JOIN items i ON p.item_id = i.item_id

共有三种类型:酷或不酷以及其他一切,您不需要过滤器(只是独特)。

关于SQL 改进 - UNION?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47288218/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com