3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ちょっと気になったSQLまとめ

Last updated at Posted at 2016-12-23

はじめに

こんなこともできる!っていう実験をまとめた投稿です。
こんな使い方もできる!と書いている箇所がありますが、その使い方を推奨しているわけではありません。
また、パフォーマンスに関しては一切検証しておりません。

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 DUPLICATEjoin、サブクエリを使った時に値を使い回せる。

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;

おわりに

他にも何かあれば追記していきます。
今日はとりあえずここまで。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?