Mysql 操作数应包含1列错误
我有以下疑问Mysql 操作数应包含1列错误,mysql,sql,mysql-error-1241,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 acc
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
)
但请告诉我一个错误:
操作数应包含1列
出现此错误的原因是,在中使用
时,子查询中应返回的列数必须正好等于一。但我宁愿在
子句中使用JOIN
over
使用联接的此的等效查询:
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
选择不同的a.userID
从a柜台
内连接优惠券
在a.ID=b.user\u ID上
内部联接帐户c
在a.ID=c.user\u ID上
其中b.code='xyz'和
DATE_SUB(CURDATE(),INTERVAL 14 DAY)出现此错误的原因是,在
中使用时,子查询中应返回的列数必须正好等于一。但我宁愿在
子句中使用JOIN
over
使用联接的此的等效查询:
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
选择不同的a.userID
从a柜台
内连接优惠券
在a.ID=b.user\u ID上
内部联接帐户c
在a.ID=c.user\u ID上
其中b.code='xyz'和
DATE_SUB(CURDATE(),INTERVAL 14 DAY)连接会更好,但是为了对您编写的内容进行最小的更改,您可以使用这样一个事实,即子查询不需要where子句中的列位于select中。i、 e.代替
id IN (
SELECT user_id, code
FROM coupon_used WHERE code ='xyz'
)
你可以用
id IN (
SELECT user_id
FROM coupon_used WHERE code ='xyz'
)
连接会更好,但是为了对您编写的内容进行最小的更改,您可以使用这样一个事实,即子查询不需要where子句中的列位于select中。i、 e.代替
id IN (
SELECT user_id, code
FROM coupon_used WHERE code ='xyz'
)
你可以用
id IN (
SELECT user_id
FROM coupon_used WHERE code ='xyz'
)
欢迎来到堆栈溢出。您可以使用工具栏按钮格式化源代码。这次我是为你做的。此外,如果您避免使用JOIN
操作符系列,那么您在关系数据库领域不会走得太远。欢迎使用堆栈溢出。您可以使用工具栏按钮格式化源代码。这次我是为你做的。此外,如果您避免使用JOIN
操作符系列,那么您在关系数据库领域不会走得太远。in
子句从长远来看会执行得很慢。由您决定
子句中的:D
从长远来看将执行缓慢。由您决定:D