为同一个表编写子查询以访问不同的记录

Posted

技术标签:

【中文标题】为同一个表编写子查询以访问不同的记录【英文标题】:Writing subquery for same table to access distinct records 【发布时间】:2019-08-18 18:06:03 【问题描述】:

我正在尝试查找完全不在retailer_id 27,28,29 中的记录数。但是此查询在配置单元中不起作用。你能建议我哪里出错了。

在同一张表上尝试过子查询,但这似乎不起作用。

Select count(Distinct T.hhid) 
  from transactions 
 where hhid NOT IN (Select hhid 
                      from transactions 
                     where retailer_id IN (4,5,6,7,8,13,17,20,21,25,31) 
                       and transaction_date between '2018-08-01' and '2019-07-31'
                    ) as T 
 where T.retailer_id IN (27, 28, 29) 
   and transaction_date between '2018-08-01' and '2019-07-31'


ERROR : missing EOF at 'as' near ')'

如果你能在 spark-sql 中提出一些对我也有用的建议。

【问题讨论】:

“完全不在”是什么意思?样本数据和期望的结果会有所帮助。 @GordonLinoff 我只想要那些使用retailer_id 27,28,29 交易的记录。在 (27,28,29) 和 (4,5,6,7,8,13,17,20,21,25,31) 中存在具有与 retailer_id 的交易的 hhid。我不想要那些隐藏。 【参考方案1】:

试试下面这个脚本-

SELECT COUNT(Distinct T.hhid) 
FROM transactions T 
WHERE hhid NOT IN (
    Select hhid 
    from transactions 
    where retailer_id IN (4,5,6,7,8,13,17,20,21,25,31) 
    and transaction_date between '2018-08-01' and '2019-07-31'
) 
AND T.retailer_id IN (27, 28, 29) 
AND transaction_date between '2018-08-01' and '2019-07-31'

【讨论】:

您的查询中定义的别名T 在哪里?另外,子查询的目的是什么? hhid NOT IN (...) 和 T.retailer_id IN (...) 事情可能不一样。 Op 必须有他或她自己的逻辑来检查这一点。我刚刚更正了查询中的语法问题。【参考方案2】:

您的查询在很多方面都没有意义:

最后的as T 放错地方了。您具体想让别名 T 代表什么? 您的两个retailer_id 列表似乎是多余的。在一种情况下,您选择retailer_id IS NOT IN (4,5,6,7,8,13,17,20,21,25,31) 的记录,然后添加一个WHERE 子句,声明retailer_id IS IN(27, 28, 29)`。为什么两者都有?

我认为您可能想重新开始并确定您的选择标准是什么,然后从那里开始。

【讨论】:

我只想要那些使用retailer_id 27,28,29 交易的记录。在 (27,28,29) 和 (4,5,6,7,8,13,17,20,21,25,31) 中存在具有与 retailer_id 的交易的 hhid。我不想要那些隐藏。

以上是关于为同一个表编写子查询以访问不同的记录的主要内容,如果未能解决你的问题,请参考以下文章

sql子查询

如何高效地从多个表中查询子记录?

以数组为参数的雪花函数因不支持的子查询错误而失败

SQL查询以选择在同一列中具有不同值的子记录的父级

Yii,MongoDB查询子文档以插入Mysql表

in 和 exists的区别