简体   繁体   English

在SQL中使用IN运算符允许重复

[英]Allow duplicates with IN operator in SQL

This is my query. 这是我的查询。

SELECT *, COUNT(A) AS FREQUENCY FROM TABA WHERE ID IN
(
 (SELECT ID FROM TABA WHERE XXXXX)
 UNION ALL
 (SELECT ID FROM TABA WHERE XXXXX)
 UNION ALL
 (SELECT ID FROM TABA WHERE XXXXX)
)
GROUP BY A
ORDER BY FREQUENCY

With this query I am always getting the FREQUENCY value as 1. 通过此查询,我总是将FREQUENCY值设为1。

Suppose say the below sub query gives the below result. 假设说下面的子查询给出了下面的结果。

 (SELECT ID FROM TABA WHERE XXXXX)
 UNION ALL
 (SELECT ID FROM TABA WHERE XXXXX)
 UNION ALL
 (SELECT ID FROM TABA WHERE XXXXX)

Result: 结果:

1
2
3
2
3
4
2

Now the full query is giving only the unique records when used with IN. 现在,完整查询在与IN一起使用时仅提供唯一记录。

I want the results to be sorted by FREQUENCY, in this eg frequency of number 3 is two. 我希望将结果按频率排序,例如,数字3的频率为2。 How can I do this? 我怎样才能做到这一点? I hope I am making sense. 我希望我有道理。

Basically, I have lots of columns in a table and I want to perform search and return the results based on the frequency of the search items. 基本上,表中有很多列,我想执行搜索并根据搜索项的频率返回结果。

SELECT ID, COUNT(*) AS FREQUENCY 
FROM TABA 
WHERE XXXXX
  OR XXXXX
  OR XXXXX
GROUP BY ID
ORDER BY COUNT(*)

You should be able to get the correct frequency values using the following: 您应该能够使用以下方法获得正确的频率值:

SELECT ID, COUNT(A) AS FREQUENCY
FROM (
 (SELECT ID, A FROM TABA WHERE XXXXX)
 UNION ALL
 (SELECT ID, A FROM TABA WHERE XXXXX)
 UNION ALL
 (SELECT ID, A FROM TABA WHERE XXXXX)
) TABA_UNION
GROUP BY ID

If you need to combine this with the other columns of the TABA table, similar to how your original query is written, then you can do this: 如果您需要将其与TABA表的其他列结合起来,类似于原始查询的编写方式,则可以执行以下操作:

SELECT TABA.*, ISNULL(TABA_FREQUENCY.FREQUENCY, 0) as FREQUENCY
FROM TABA
LEFT OUTER JOIN (
    SELECT ID, COUNT(A) AS FREQUENCY
    FROM (
     (SELECT ID, A FROM TABA WHERE XXXXX)
     UNION ALL
     (SELECT ID, A FROM TABA WHERE XXXXX)
     UNION ALL
     (SELECT ID, A FROM TABA WHERE XXXXX)
    ) TABA_UNION
    GROUP BY ID
) TABA_FREQUENCY ON
  TABA_FREQUENCY.ID = TABA.ID

Left outer join is used instead of inner join in order to include any records in TABA that don't meet any of the criteria specified in the unioned select statements. 使用左外部联接代替内部联接,以便在TABA中包括不满足联合的select语句中指定的任何条件的任何记录。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM