0

さて、次の問題があります..2つのサブクエリで単一の選択ステートメントを実行しようとしています。私がそれをする必要があるのは、ほとんど次のことです..

SELECT * FROM messages WHERE以下の条件を満たしていること。

条件 1:

 SELECT id 
 FROM messages 
 WHERE `receiver` = 123510 && sender= 123457 && status != 3;

条件 2:

 SELECT id 
 FROM messages 
 WHERE receiver = 123457 && sender = 123510 && status !=4;

私は次のことを試しました:

SELECT * 
FROM messages 
WHERE id IN (
                 (
                     SELECT id 
                     FROM messages 
                     WHERE `receiver` = 123510 && sender= 123457 && status != 3
                 ),
                 (
                     SELECT id 
                     FROM messages 
                     WHERE receiver = 123457 && sender = 123510 && status !=4)
                  )  

しかし、私がそうすると、mysqlはサブクエリで戻ってきて、複数の行を返します...

これを解決する方法について何か提案はありますか?

4

2 に答える 2

3

これがあなたが探しているものだと思います:

SELECT *
FROM messages
WHERE (receiver = 123510 AND sender = 123457 AND status <> 3) OR
      (receiver = 123457 AND sender = 123510 AND status <> 4);
于 2012-08-01T06:06:49.037 に答える
0

各クエリをユニオンで区切るか、ORで区切った2つの別々のINとして実行する必要があります。

SELECT * 
FROM messages 
WHERE id IN (
          SELECT id
          FROM messages
          WHERE `receiver` = 123510 and 
                sender= 123457 and 
                status != 3) or
          UNION
          SELECT id
          FROM messages 
          WHERE receiver = 123457 and 
          sender = 123510 and
          status !=4)

しかし、実際には、これを行う方がはるかに良いでしょう。

SELECT * 
FROM messages 
WHERE (`receiver` = 123510 and 
       sender = 123457 and 
       status != 3) or
      (receiver = 123457 and 
       sender = 123510 and
       status !=4)
于 2012-08-01T06:12:03.217 に答える