Oracle-Sql-Developer

“處理語句時出錯”執行查詢在其他行中查找具有多個值的唯一值

  • May 11, 2018

這個查詢在其他行中查找具有多個值的唯一值的語法有什麼問題嗎?

Select Distinct Ss.`cd`, Ss.`cd`
From nit.assrr As Ss
   Join (
      Select `cd`
      From nit.assrr
      Group By `cd`
      Having Count(Distinct `cd`) > 1
     ) As Y
On Ss.`cd` = Y.`cd`

我收到此錯誤:

$$ Cloudera $$HiveJDBCDriver 錯誤處理查詢/語句。 錯誤程式碼:2,SQL 狀態:處理語句時出錯:FAILED:執行錯誤,從 org.apache.hadoop.hive.ql.exec.mr.MapRedTask 返回程式碼 2,查詢:.. 我的查詢

我懷疑您使用的是 0.13.0 之前的 Hive 版本。在這種情況下,問題是AS為子查詢提供別名時的關鍵字。

從 HiveQL 文件子查詢中的FROM子句

SELECT ... FROM (subquery) name ...
SELECT ... FROM (subquery) AS name ...   (Note: Only valid starting with Hive 0.13.0)

… Hive 0.13.0及更高版本 (HIVE-6519)中的子查詢名稱之前可以包含可選關鍵字“AS” 。

因此,有效的語法是:

Select Distinct Ss.`cd`, Ss.`cd`
From nit.assrr AS Ss
   Join (
      Select `cd`
      From nit.assrr
      Group By `cd`
      Having Count(Distinct `cd`) > 1
     ) Y                                  -- AS removed
On Ss.`cd` = Y.`cd` ;

關於查詢的語義。我不確定實際問題是什麼,但無論表中的數據是什麼,這個查詢都保證返回 0 行。

COUNT(DISTINCT cd)將是 1 當你有GROUP BY cd所以HAVING子句將FALSE永遠是並且Y子查詢將有 0 行。

引用自:https://dba.stackexchange.com/questions/206286