0

我有以下查询

SELECT * 
FROM users
WHERE id NOT IN (
    SELECT user_id
    FROM  `counter` 
    WHERE DATE_SUB( CURDATE( ) , INTERVAL 14 DAY ) <= created
)
AND id IN (
    SELECT user_id
    FROM coupon_used
)
AND id IN (
    SELECT user_id
    FROM accounts
)

我需要将 where 子句放在 coupon_used 表中,如果 user id IN coupon used 表中代码 ='xyz'。我确实喜欢这个

id IN (
    SELECT user_id, code 
    FROM coupon_used WHERE code ='xyz'
)

但告诉我一个错误:

操作数应包含 1 列。

4

2 回答 2

2

连接会更好,但是为了对您编写的内容进行最小的更改,您可以使用子查询不需要其 where 子句中的列在选择中的事实。即代替

id IN (
    SELECT user_id, code 
    FROM coupon_used WHERE code ='xyz'
)

您可以使用

id IN (
    SELECT user_id
    FROM coupon_used WHERE code ='xyz'
)
于 2013-03-01T13:56:41.343 回答
1

您收到该错误的原因是因为在使用时IN,应在子查询中返回的列数必须完全等于一。但我宁愿使用JOINoverIN子句。

使用连接的等效查询:

SELECT  DISTINCT a.userID
FROM    counter a
        INNER JOIN coupon_used b
            ON a.ID = b.user_id
        INNER JOIN accounts c
            ON a.ID = c.user_id
WHERE   b.code ='xyz' AND
        DATE_SUB(CURDATE(), INTERVAL 14 DAY ) <= created
于 2013-03-01T13:50:54.550 回答