操作数应该包含1列错误



我有以下查询

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表中,如果用户id在coupon useed表中,代码='xyz'。我确实喜欢这个

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

但是显示一个错误:

操作数必须包含1列

连接会更好,但是对于您所编写的内容的最小更改,您可以使用子查询不需要将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'
)

您得到该错误的原因是因为当使用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

相关内容

  • 没有找到相关文章