比较多个值到where子句中的子查询结果

时间:2020-03-27 14:51:53

标签: mysql sql database postgresql

我有两个相关的表,如下所示:

用户

user_id <\ PK>

USERACTIONS

user_action_id <\ PK>

user_id <\ FK>

user_action <\ int>

每当用户执行操作时,“ useractions”表中都会有一个新插入。我需要一个查询来获取这些USERACTION行,其中用户仅执行特定的一组操作,例如(1,2),而不是(3,4)。 所以我有一个查询-

<Grid>
    <Ellipse Fill="#33000000"
             Stroke="#FF000000"
             StrokeThickness="2"
             HorizontalAlignment="Left" VerticalAlignment="Bottom"
             Width="15" Height="15" />

    <Border Height="9" Margin="10 0 0 3"
            HorizontalAlignment="Stretch" VerticalAlignment="Bottom"
            BorderThickness="0 2"
            BorderBrush="#FF000000"
            Background="#33000000" />
</Grid>

问题是上述查询无法正常工作,因为(1,2)期望子查询也返回两个可以理解的列。这是我得到的错误-

错误:子查询的列太少

给出一个值,说(1)或(2)可以很好地工作。我想知道是否可以使用同一查询并将子查询的结果与多个值进行比较?我更喜欢相同的查询,因为这里展示的案例只是大型查询的一部分。

请注意,查询中不应列出执行了(1,2,3,4)的用户,应列出仅执行(1,2,3)的用户,并且user_action值可以是任意随机整数。

欢迎使用任何其他查询,但希望在同一查询中进行更改。预先感谢。

2 个答案:

答案 0 :(得分:1)

尝试一下:

SELECT USERS.user_id, USERACTIONS.user_action
FROM USERACTIONS
LEFT JOIN USERS ON USERS.user_id = USERACTIONS.user_id  where USERACTIONS.user_action in (1,2);

答案 1 :(得分:1)

这适用于您的查询。

您将数字添加到条款中

SELECT a.user_id
FROM
(SELECT DISTINCT user_id 
from 
 USERACTIONS 
 WHERE user_action 
               IN (1,2)) a 
INNER JOIN
(SELECT DISTINCT user_id 
from 
 USERACTIONS 
 WHERE user_action 
              NOT  IN (1,2)) b 
ON a.user_id <> b.user_id                  
; 
CREATE TABLE USERACTIONS (id INT NOT NULL AUTO_INCREMENT
                            , PRIMARY KEY(id)
                            , user_action INT
                            , user_id INT
                            
                            );
                            
                            INSERT USERACTIONS VALUES (NULL,1,100),(NULL,2,100),(NULL,3,100), (NULL,1,101),(NULL,2,101);
✓

✓
SELECT a.user_id
FROM
(SELECT DISTINCT user_id 
from 
 USERACTIONS 
 WHERE user_action 
               IN (1,2)) a 
INNER JOIN
(SELECT DISTINCT user_id 
from 
 USERACTIONS 
 WHERE user_action 
              NOT  IN (1,2)) b 
ON a.user_id <> b.user_id
               
; 
| user_id |
| ------: |
|     101 |

db <>提琴here