问题描述
我的问题是关于如何优化和减少SQL查询的大小。我想使用UNION加入20多个查询,按照下面的逻辑,它给我正确的结果,但是我在这里寻找两件事
-
更有效率的
-
我的查询中已经有20个UNIONS,并且每个月我必须再增加2-4个UNIONS,这使得此查询很长,因此有什么方法可以用更少的代码来改写此查询
logits = Multiply()([dense_output,input_2]) initializer = tf.keras.initializers.Identity() masked_actions = Dense(num_actions,use_bias=False,trainable=False)(logits) #returns the same logits
以此类推...
结果
Select
'343' As 'Manual ID','24/07/2020' As 'Date',A.ID,O.Order_Name,C.Customer_Name,Q.Quantity
From Shipper A
Left Join Order O A.ID = O.ID
Left Join Customer C A.ID = C.ID
Left Join Quantity Q Q.ID = C.ID
where A.ID IN (1)
UNION
Select
'323' As 'Manual ID','24/08/2020' As 'Date',Q.Quantity
From Shipper A
Left Join Order O A.ID = O.ID
Left Join Customer C A.ID = C.ID
Left Join Quantity Q Q.ID = C.ID
where A.ID IN(2,3,4)
解决方法
您可以尝试以下方法:
Select
CASE
WHEN A.ID IN(1) THEN '343'
WHEN A.ID IN(2,3,4) THEN '323'
END As 'Manual ID',CASE
WHEN A.ID IN(1) THEN '24/07/2020'
WHEN A.ID IN(2,4) THEN '24/08/2020'
END As 'Date',A.ID,O.Order_Name,C.Customer_Name,Q.Quantity
From Shipper A
Left Join Order O A.ID = O.ID
Left Join Customer C A.ID = C.ID
Left Join Quantity Q Q.ID = C.ID
Where A.ID IN(1,2,4)
,
第一个建议是将参数移到另一个表中,然后对其进行联接。如果您不想使用真实的表格,甚至可以将其设为内联视图...
第二个建议是使用UNION ALL以避免UNION带来的重复数据删除费用。
SELECT
params.*,Q.Quantity
FROM
(
SELECT '343' As 'Manual ID','24/07/2020' As 'Date',1 AS A_ID
UNION ALL SELECT '323' As 'Manual ID','24/08/2020' As 'Date',2 AS A_ID
UNION ALL SELECT '323' As 'Manual ID',3 AS A_ID
UNION ALL SELECT '323' As 'Manual ID',4 AS A_ID
)
AS params
INNER JOIN Shipper A ON A.ID = params.A_ID
Left Join Order O ON A.ID = O.ID
Left Join Customer C ON C A.ID = C.ID
Left Join Quantity Q ON Q.ID = C.ID
或者,不要每个月重新计算一次。每月写一个新查询,然后将结果插入另一个表中?
,如果您只想查询,更好的方法是使用case when语句,但是您不时需要不断更新查询以添加新的案例。
另一种优化的解决方案将是创建一个新表来存储
{strong> Shipper (表格)中的 Manual ID,Date,(Common) ID
。然后创建一个视图,将上述所有表与新表连接起来。
新表格
Manual ID | Date | ID |
343 | 24/07/2020 | 1 |
323 | 24/08/2020 | 2 |
323 | 24/08/2020 | 3 |
323 | 24/08/2020 | 4 |
然后创建一个视图,连接所有表,包括具有 ID 的新表。
在这种情况下,您只需要向新表中添加新值,即可自行查看结果。
CREATE VIEW MY_VIEW
AS
SELECT * FROM
(
Select
T.[Manual ID],T.[Date],Q.Quantity
From Shipper A
Left Join Order O A.ID = O.ID
Left Join Customer C A.ID = C.ID
Left Join Quantity Q Q.ID = C.ID
Left Join NewTable T T.ID = A.ID
)
现在,只需在新表中插入值,然后从MY_VIEW中获取完整数据即可。它将获得与您所要的结果相同的结果。