0

次のクエリがあります

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句を配置する必要があります。ユーザーIDINクーポン使用テーブルの場合、コード='xyz'です。私はこれが好きでした

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

しかし、次のようなエラーを表示してください。

オペランドには1列が含まれている必要があります。

4

2 に答える 2

2

結合の方が良いでしょうが、あなたが書いたものへの最小限の変更のために、サブクエリがselectにあるwhere句の列を必要としないという事実を使うことができます。すなわちの代わりに

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

あなたが使用することができます

id IN (
    SELECT user_id
    FROM coupon_used WHERE code ='xyz'
)
于 2013-03-01T13:56:41.343 に答える
1

このエラーが発生する理由は、を使用する場合IN、サブクエリで返される列の数が1と正確に等しくなければならないためです。しかし、私はむしろJOINoverIN句を使用します。

結合を使用したこれと同等のクエリ:

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
于 2013-03-01T13:50:54.550 に答える