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

MySQLで交差する代わりに

    MicrosoftSQLServerの INTERSECT "INTERSECTオペランドの左側と右側の両方のクエリによって返される個別の値を返します" これは、標準のINNER JOINとは異なります。 またはWHERE EXISTS クエリ。

    SQL Server

    CREATE TABLE table_a (
        id INT PRIMARY KEY,
        value VARCHAR(255)
    );
    
    CREATE TABLE table_b (
        id INT PRIMARY KEY,
        value VARCHAR(255)
    );
    
    INSERT INTO table_a VALUES (1, 'A'), (2, 'B'), (3, 'B');
    INSERT INTO table_b VALUES (1, 'B');
    
    SELECT value FROM table_a
    INTERSECT
    SELECT value FROM table_b
    
    value
    -----
    B
    
    (1 rows affected)
    

    MySQL

    CREATE TABLE `table_a` (
      `id` INT NOT NULL AUTO_INCREMENT,
      `value` varchar(255),
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB;
    
    CREATE TABLE `table_b` LIKE `table_a`;
    
    INSERT INTO table_a VALUES (1, 'A'), (2, 'B'), (3, 'B');
    INSERT INTO table_b VALUES (1, 'B');
    
    SELECT value FROM table_a
    INNER JOIN table_b
    USING (value);
    
    +-------+
    | value |
    +-------+
    | B     |
    | B     |
    +-------+
    2 rows in set (0.00 sec)
    
    SELECT value FROM table_a
    WHERE (value) IN
    (SELECT value FROM table_b);
    
    +-------+
    | value |
    +-------+
    | B     |
    | B     |
    +-------+
    

    この特定の質問では、id列が関係しているため、重複する値は返されませんが、完全を期すために、INNER JOINを使用したMySQLの代替手段を次に示します。 およびDISTINCT

    SELECT DISTINCT value FROM table_a
    INNER JOIN table_b
    USING (value);
    
    +-------+
    | value |
    +-------+
    | B     |
    +-------+
    

    そして、WHERE ... INを使用した別の例 およびDISTINCT

    SELECT DISTINCT value FROM table_a
    WHERE (value) IN
    (SELECT value FROM table_b);
    
    +-------+
    | value |
    +-------+
    | B     |
    +-------+
    


    1. MySQLでWITH句をどのように使用しますか?

    2. 長いバイナリ(生データ)文字列の保存

    3. TOPまたはLIMITを使用せずにTOP10行を取得しますか? –今週のインタビュー質問#247

    4. SQL Serverで小文字を大文字に変換する方法– UPPER()