我有以下查询
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