我有以下查询
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列。
答案 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