cari

Rumah  >  Soal Jawab  >  teks badan

Bolehkah pembolehubah sementara MySQL digunakan dalam klausa WHERE?

Dalam MySQL, bolehkah pembolehubah sementara digunakan dalam WHEREklausa?

Sebagai contoh, dalam pertanyaan berikut:

SELECT `id`, @var := `id` * 2 FROM `user`

@var telah berjaya ditetapkan kepada dua kali ganda nilai `id`

Namun, jika saya cuba menapis set hasil untuk hanya memasukkan hasil dengan @var kurang daripada 10:

SELECT `id`, @var := `id` * 2 FROM `user` WHERE @var < 10

Kemudian saya tidak mendapat apa-apa keputusan.

Bagaimana untuk menapis hasil berdasarkan nilai @var?

P粉798343415P粉798343415399 hari yang lalu588

membalas semua(2)saya akan balas

  • P粉760675452

    P粉7606754522023-10-25 09:10:31

    S: Bolehkah pembolehubah sementara MySQL digunakan dalam klausa WHERE?

    Ya. Pembolehubah takrif pengguna MySQL (seperti @var) boleh dirujuk dalam klausa WHERE.

    Pembolehubah yang ditakrifkan pengguna ialah rujukan kepada apa-apa nilai yang pada masa ini diberikan kepadanya apabila ungkapan itu dinilai.

    Dalam pertanyaan, predikat dalam klausa WHERE dinilai sebelum ungkapan dalam senarai SELECT.

    Iaitu, apabila satu baris diakses, @var < 10 akan dinilai sebagai ungkapan Boolean; untuk setiap baris calon, ungkapan itu dinilai dan baris dikembalikan hanya jika hasilnya BENAR.

    Jika anda memberikan pembolehubah ini nilai yang lebih besar daripada atau sama dengan 10, semua baris akan dikembalikan sebelum melaksanakan pernyataan.

    S: Bagaimana untuk menapis keputusan berdasarkan nilai @var?

    Anda benar-benar tidak boleh. (Malah, itulah yang dilakukan oleh pertanyaan asal anda.)

    Anda boleh memasukkan predikat dalam ungkapan selain daripada @var 之外的其他表达式中包含谓词;这些表达式可以从分配给 @var; ungkapan ini boleh diperoleh daripada nilai yang diberikan kepada

    .

    HAVING 子句来过滤返回的行。 (注意:HAVING 子句在结果集准备好之后进行计算;与 WHERESebagai pilihan, anda boleh mengembalikan ungkapan dalam senarai SELECT dan kemudian menggunakan klausa

    yang berbeza, yang menilai apabila baris diakses. )

    Pilihan lain ialah menggunakan paparan sebaris untuk menyediakan set hasil, dan kemudian pertanyaan luar boleh menggunakan klausa WHERE pada ungkapan yang dikembalikan.

    @var 以外的表达式应用谓词;他们实际上并没有对 @varTetapi secara tegasnya, kaedah ini semuanya menggunakan predikat pada ungkapan selain

    ; mereka sebenarnya tidak menguji nilai dalam 🎜. 🎜

    balas
    0
  • P粉530519234

    P粉5305192342023-10-25 00:42:47

    Anda perlu menetapkan alias dan mengujinya dalam klausa HAVING:

    SELECT id, @var := id * 2 AS id_times_2
    FROM user
    HAVING id_times_2 < 10

    Perhatikan bahawa jika anda hanya menggunakan formula untuk menapis, dan bukannya menghantar hasil dalaman dari satu baris ke baris seterusnya, anda tidak memerlukan pembolehubah ini sama sekali. Anda boleh menulis:

    SELECT id, id * 2 AS id_times_2
    FROM user
    HAVING id_times_2 < 10

    balas
    0
  • Batalbalas