はじめに
こんなこともできる!っていう実験をまとめた投稿です。
こんな使い方もできる!と書いている箇所がありますが、その使い方を推奨しているわけではありません。
また、パフォーマンスに関しては一切検証しておりません。
WHERE句 サブクエリ
SELECT
*
FROM
Table_A
WHERE
a = (SELECT a FROM Table_B)
AND
b = (SELECT b FROM Table_B);
上記のような冗長なクエリを下記のようにまとめて書くことができる。
=
以外の比較演算子でも使える。
SELECT
*
FROM
Table_A
WHERE
(a, b) = (SELECT a, b FROM Table_B);
変数
MySQLにはユーザー定義変数というものがある。
これを使えば、INSERT...ON DUPLICATE
やjoin
、サブクエリを使った時に値を使い回せる。
SET @a = 1;
SET @b = 2;
SET @c = 3;
SET @d = 4;
INSERT INTO
Table_A
(a, b, c, d)
VALUES
(@a, @b, @c, @d)
ON DUPLICATE KEY UPDATE
a = @a,
b = @b;
他にも、下記のような使い方ができる。
Table_Aの結果に、1から順番にカウントアップした番号を割り振っている。
UPDATE文とWHERE句等を上手く組み合わせれば、番号の再振り分けなんかもできる。
set @a = 0;
select @a := @a+1, a, b from Table_A;
おわりに
他にも何かあれば追記していきます。
今日はとりあえずここまで。