sql >> データベース >  >> RDS >> Mysql

SQLサブクエリの結果で「LIKE」を使用する

    まず、このクエリはすべき 正常に機能していない:

    SELECT *
    From Customers
    WHERE Customers.ContactName = (SELECT FirstName
                                   from Employees as E, orders as O
                                   WHERE LIMIT 1);
    

    WHERE LIMIT 1 適切なSQLではありません。そして、適切なjoinの使い方を学ぶ必要があります 構文。おそらく、あなたは意図しています:

    SELECT c.*
    From Customers c
    WHERE c.ContactName = (SELECT FirstName
                           FROM Employees as E JOIN
                                Orders as O
                                ON . . .
                           LIMIT 1
                          );
    

    おそらくLIKEを追加することができます =の代わりに サブクエリの「%」:

    WHERE c.ContactName LIKE (SELECT CONCAT('%', FirstName, '%') . . .
    

    しかし、私はこれをEXISTSを使用して記述します :

    SELECT c.*
    From Customers c
    WHERE EXISTS (SELECT 1
                  FROM Employees as E JOIN
                       Orders as O
                       ON . . .
                  WHERE c.ContactName LIKE CONCAT('%', FirstName, '%')
                 );
    

    これは、クエリとまったく同じことを行うわけではありません。それはもっと合理的なことをします。サブクエリからの1つのランダムな名前を比較する代わりに、何かがあるかどうかを判断します。 サブクエリで一致します。これは、クエリのより合理的な意図のようです。



    1. DATETIMEmysqlを使用して日付間の時間範囲をクエリする

    2. SQLクエリが統計状態でスタックしている

    3. ActiveRecordrawSQLから型指定された結果を取得する

    4. OracleDatabaseのPL/SQLストアドプロシージャとは