只为SQL中的条件选择唯一记录

约翰

我如何仅选择唯一用户ID仅具有ACCESS_COLUMN_ID值1的用户,即使他们也可能也具有ACCESS_COLUMN_ID值2。

这是我的查询,返回1和2:

SELECT DISTINCT(USER_ID) FROM USER_ACCESS WHERE ACCESS_COLUMN_ID = 1

返回的结果还包含具有的用户ID ACCESS_COLUMN_ID = 2

Here is my table data

USERID ACCESS_COLUMN_ID 
1          1
1          2
2          1

我期望USERID 2仅作为查询结果

亭子

您可以使用HAVING

SELECT    USER_ID
FROM      USER_ACCESS 
GROUP  BY USER_ID
HAVING    MIN(ACCESS_COLUMN_ID) = 1
AND       MAX(ACCESS_COLUMN_ID) = 1

user_id由于该group by子句此查询将获取all ,但仅获取唯一的查询然后,将采用access_column_id为每个找到的最小值和最大值,如果这两个值均为1,则将user_id保留在最终结果集中。

上面的表将只引用一次,因此具有良好的性能。

为了您的利益,还有几种其他方法可获得相同的结果。但是,他们都需要将该表引用两次。您可能要自己比较它们的可读性和性能:

不存在

SELECT    DISTINCT USER_ID
FROM      USER_ACCESS UA1
WHERE     UA1.ACCESS_COLUMN_ID = 1
AND       NOT EXISTS (
              SELECT 1
              FROM   USER_ACCESS UA2
              WHERE  UA1.USER_ID = UA2.USER_ID
              AND    UA2.ACCESS_COLUMN_ID <> 1)

不在

这与上一个非常相似,但是以我的经验并没有那么好:

SELECT    DISTINCT USER_ID
FROM      USER_ACCESS
WHERE     ACCESS_COLUMN_ID = 1
AND       USER_ID NOT IN (
              SELECT USER_ID
              FROM   USER_ACCESS
              WHERE  ACCESS_COLUMN_ID <> 1)

外部自我加入

这通常比前两个解决方案具有更好的性能:

SELECT    DISTINCT USER_ID
FROM      USER_ACCESS UA1
LEFT JOIN USER_ACCESS UA2
       ON UA1.USER_ID = UA2.USER_ID
      AND UA2.ACCESS_COLUMN_ID <> 1
WHERE     UA1.ACCESS_COLUMN_ID = 1
AND       UA2.USER_ID IS NULL

最后一个NULL条件检查外部联接没有产生任何匹配(与ACCESS_COMUN_ID <> 1)。

除了

这是SQL Server特有的语法,但很容易理解(Oracle也有类似的语法MINUS)。

SELECT    DISTINCT USER_ID
FROM      USER_ACCESS
WHERE     ACCESS_COLUMN_ID = 1
EXCEPT
SELECT    USER_ID
FROM      USER_ACCESS
WHERE     ACCESS_COLUMN_ID <> 1

备注DISTINCT

DISTINCT关键字是很容易理解,但人们可能经常用得到更好的性能GROUP BY条款代替。这可以应用于上述所有解决方案。

如果可以肯定的是不能有两个记录与相同的价值观USER_IDACCESS_COLUMN_ID当时的DISTINCT关键字可以在上面查询被排除在外。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

row_number()记录范围内的SQL Server唯一记录

来自分类Dev

MySQL在两列上选择唯一记录

来自分类Dev

如何在Rails中显示唯一记录?

来自分类Dev

仅返回此ActiveRecord查询中的唯一记录

来自分类Dev

如何按行数在python中查找唯一记录?

来自分类Dev

Laravel:从数据库中检索唯一记录

来自分类Dev

选择唯一记录

来自分类Dev

如何在mysql中仅选择唯一记录

来自分类Dev

SQL语句构造:选择唯一记录

来自分类Dev

从具有SQL记录中唯一记录的表中获取最小的日期

来自分类Dev

使用唯一记录作为表头

来自分类Dev

加入后从表中获取唯一记录

来自分类Dev

从查询中查找唯一记录

来自分类Dev

MySQL查询以查找唯一记录

来自分类Dev

MySQL:批量更新唯一记录

来自分类Dev

选择N行的唯一记录限制

来自分类Dev

如何仅选择唯一记录

来自分类Dev

INSERT查询唯一记录-MySQL

来自分类Dev

MySQL-返回唯一记录

来自分类Dev

只为SQL中的条件选择唯一记录

来自分类Dev

Mysql唯一记录2列

来自分类Dev

在MS Access查询中获取唯一记录

来自分类Dev

根据访问中的某些条件查询以仅显示唯一记录

来自分类Dev

如何使用SQL消除唯一记录?

来自分类Dev

如何获得唯一记录

来自分类Dev

NSDictionary - 获取唯一记录,选择哪些键必须是唯一的

来自分类Dev

快速从大文件中获取唯一记录

来自分类Dev

Reactjs 获取最后选择的唯一记录的值

来自分类Dev

如何根据另一个 pyspark 数据框中的唯一记录或值为未知的值选择一个 pyspark 数据框中的记录