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

テーブルにない値をリストから選択します

    一時テーブルが最善の解決策ですが、不可能な場合は、定数を選択してそれらを結合することにより、一時テーブルをファッジすることができます。

    このソリューションを使用すると、次のことができます。-

    SELECT i
    FROM 
    (
        SELECT 1 AS i UNION SELECT 2 UNION SELECT 3 UNION SELECT 6 UNION SELECT 7
    ) AS mylistofids 
    LEFT JOIN mytable
    ON mytable.id = i
    WHERE mytable.id IS NULL;
    

    数値の範囲を相互結合することにより、(整数IDを処理していると仮定して)膨大な範囲の数値を生成することもできます。次に、IN句にあるものを選択します。-

    SELECT i
    FROM 
    (
        SELECT units.i + tens.i * 10 + hundreds.i * 100 + thousands.i * 1000 + tensthousands.i * 10000 AS i
        FROM (SELECT 1 AS i UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 0 ) AS units
        CROSS JOIN (SELECT 1 AS i UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 0 ) AS tens
        CROSS JOIN (SELECT 1 AS i UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 0 ) AS hundreds
        CROSS JOIN (SELECT 1 AS i UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 0 ) AS thousands
        CROSS JOIN (SELECT 1 AS i UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 0 ) AS tensthousands
    ) AS mylistofids 
    LEFT JOIN mytable
    ON mytable.id = i
    WHERE mylistofids.i IN (1, 2, 3, 6, 7)
    AND mytable.id IS NULL;
    



    1. Azure仮想マシンでのSQLServer2014の実行

    2. SQL Serverでマテリアライズドビューを作成するにはどうすればよいですか?

    3. MySQLの特定の列の後に複数の列を追加する

    4. SQL JOINの順序はパフォーマンスに影響しますか?