sql >> Databáze >  >> RDS >> Mysql

Vyhodnocení násobků výrazů 'IN' v klauzulích 'WHERE' v mysql

Tento dotaz vrátí řádky, kde b je buď 5 nebo 7 , AND c je 4 .

Co myslíte „hodnocením ve dvojicích?“

Aktualizace:

K ukázce přidám ještě jeden řádek:

 +----------+----------+----------+
 |    PK    |     b    |     c    |
 +----------+----------+----------+
 |     1    |     2    |     3    |
 +----------+----------+----------+
 |     2    |     5    |     4    |
 +----------+----------+----------+
 |     3    |     7    |     9    |
 +----------+----------+----------+
 |     4    |     7    |     4    |
 +----------+----------+----------+
 |     5    |     2    |     9    |
 +----------+----------+----------+

Pokud chcete porovnat celé sady, můžete použít tuto syntaxi:

SELECT  *
FROM    table_name
WHERE   (b, c) IN ((2, 3), (7, 9))

To znamená:"vrátit všechny řádky, kde je b je 2 a c je 3 současně NEBO b je 7 a с je 9 ve stejnou dobu."

Ve výše uvedeném příkladu tento dotaz vrátí řádky 1 a 3

Ale pokud tento dotaz přepíšete opačně, například takto:

SELECT  *
FROM    table_name
WHERE   b IN (2, 7)
        AND c IN (3, 9)

, bude to znamenat "vrátit všechny řádky, kde b je buď 2 nebo 7 , AND c je buď 3 nebo 9 ).

Tím se vrátí řádky 1 , 3 a 5 , od řádku 5 splňuje podmínku pro druhý dotaz, ale ne pro první.



  1. Programově vytvořte objekt `DataSource` pro Postgres JDBC

  2. Odstranění řádku s cizím klíčem odkazujícím na sebe

  3. Migrace schématu:Vztah ke hvězdě

  4. Jak Group_Concat() funguje v SQLite