Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择不同的_Sql_Oracle_Select - Fatal编程技术网

Sql 选择不同的

Sql 选择不同的,sql,oracle,select,Sql,Oracle,Select,我有这个表列\u选项卡: INDEX_OWNER INDEX_NAME TEXT ------------------------------------------------------------------------ DUMMY PK_FUL_REQUEST CUSTOMERID, ID, INSTITUTIONID NIR PK_FUL_REQUEST CUSTOMERID, ID, IN

我有这个表
列\u选项卡

INDEX_OWNER     INDEX_NAME           TEXT
------------------------------------------------------------------------
DUMMY           PK_FUL_REQUEST       CUSTOMERID, ID, INSTITUTIONID
NIR             PK_FUL_REQUEST       CUSTOMERID, ID, INSTITUTIONID
NIR             IX_REQUEST_HASH      CUSTOMERID, HASH_KEY, INSTITUTIONID
DUMMY           UQ_REQUEST_HASH      CUSTOMERID, HASH_KEY, INSTITUTIONID
我想得到文本列相等但索引名称不相等的行

我可以用两张相同的桌子,但我可以用一张桌子吗

预期结果是:

    INDEX_OWNER     INDEX_NAME           TEXT
------------------------------------------------------------------------
NIR             IX_REQUEST_HASH      CUSTOMERID, HASH_KEY, INSTITUTIONID
DUMMY           UQ_REQUEST_HASH      CUSTOMERID, HASH_KEY, INSTITUTIONID
对它的查询可以通过以下方式实现:

select index_owner, index_name, text
  from columns_tab a, columns_tab b
 where a.text = b.text
   and a.index_name != b.index_name
我不想从同一张表中选择两次就可以实现它。

给你:

select owner, index_name, text
  from (select t.*,
               count(*) over(partition by text, index_name) both_match,
               count(*) over(partition by text) text_match
          from COLUMNS_TAB t)
 where text_match > 1
   and both_match = 1;
但必须指出,如果您在性能方面两次避免查询表,那么我的方法不一定会表现得更好。您应该比较两个查询在实际数据上的执行计划。

另一个答案:

Oracle 11g R2架构设置

CREATE TABLE columns_tab ( INDEX_OWNER,     INDEX_NAME,           TEXT ) AS
          SELECT 'DUMMY', 'PK_FUL_REQUEST',  'CUSTOMERID, ID, INSTITUTIONID' FROM DUAL
UNION ALL SELECT 'NIR',   'PK_FUL_REQUEST',  'CUSTOMERID, ID, INSTITUTIONID' FROM DUAL
UNION ALL SELECT 'NIR',   'IX_REQUEST_HASH', 'CUSTOMERID, HASH_KEY, INSTITUTIONID' FROM DUAL
UNION ALL SELECT 'DUMMY', 'UQ_REQUEST_HASH', 'CUSTOMERID, HASH_KEY, INSTITUTIONID' FROM DUAL;
WITH prev_next AS (
  SELECT t.*,
         LAG( index_name  ) OVER ( PARTITION BY text ORDER BY index_name ) AS p_name,
         LEAD( index_name ) OVER ( PARTITION BY text ORDER BY index_name ) AS n_name
  FROM   columns_tab t
)
SELECT index_owner,
       index_name,
       text
FROM   prev_next
WHERE  index_name <> p_name
OR     index_name <> n_name
| INDEX_OWNER |      INDEX_NAME |                                TEXT |
|-------------|-----------------|-------------------------------------|
|         NIR | IX_REQUEST_HASH | CUSTOMERID, HASH_KEY, INSTITUTIONID |
|       DUMMY | UQ_REQUEST_HASH | CUSTOMERID, HASH_KEY, INSTITUTIONID |
查询1

CREATE TABLE columns_tab ( INDEX_OWNER,     INDEX_NAME,           TEXT ) AS
          SELECT 'DUMMY', 'PK_FUL_REQUEST',  'CUSTOMERID, ID, INSTITUTIONID' FROM DUAL
UNION ALL SELECT 'NIR',   'PK_FUL_REQUEST',  'CUSTOMERID, ID, INSTITUTIONID' FROM DUAL
UNION ALL SELECT 'NIR',   'IX_REQUEST_HASH', 'CUSTOMERID, HASH_KEY, INSTITUTIONID' FROM DUAL
UNION ALL SELECT 'DUMMY', 'UQ_REQUEST_HASH', 'CUSTOMERID, HASH_KEY, INSTITUTIONID' FROM DUAL;
WITH prev_next AS (
  SELECT t.*,
         LAG( index_name  ) OVER ( PARTITION BY text ORDER BY index_name ) AS p_name,
         LEAD( index_name ) OVER ( PARTITION BY text ORDER BY index_name ) AS n_name
  FROM   columns_tab t
)
SELECT index_owner,
       index_name,
       text
FROM   prev_next
WHERE  index_name <> p_name
OR     index_name <> n_name
| INDEX_OWNER |      INDEX_NAME |                                TEXT |
|-------------|-----------------|-------------------------------------|
|         NIR | IX_REQUEST_HASH | CUSTOMERID, HASH_KEY, INSTITUTIONID |
|       DUMMY | UQ_REQUEST_HASH | CUSTOMERID, HASH_KEY, INSTITUTIONID |

那张表上有主键吗?你期望的结果是什么?你想得到所有可能的组合吗,比如1不等于2,1不等于3,2不等于3,等等?或者,您希望只获取按文本排序的结果,然后比较每个邻居索引名称吗?在预期结果示例中,您如何知道选择哪一行?你的标准是什么?我的意思是,每一对中都有两个可能的候选人。我想要他们两个。看看我写的查询。我想要同样的东西,但是只查询一次表(如果可能的话)。