操作数应包含1列错误

时间:2013-03-01 13:47:08

标签: mysql sql mysql-error-1241

我有以下查询

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
)

我需要在coupon_used表中放置where子句,如果用户id IN优惠券使用了code ='xyz'的表。 我确实喜欢这个

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

但是向我显示错误:

  

操作数应包含1列。

2 个答案:

答案 0 :(得分:2)

连接会更好,但是对于您编写的内容的最小更改,您可以使用子查询不需要其where子句中的列位于select中的事实。即代替

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

你可以使用

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

答案 1 :(得分:1)

您收到该错误的原因是因为在使用IN时,应在子查询上返回的列数必须完全等于1。但我宁愿使用JOIN而不是IN条款。

使用join的等效查询:

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