Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MYSQL - Buat kueri sql tunggal dari beberapa kueri

Teknik 1:Menggabungkan skalar:

SELECT a ... LIMIT 1;
SELECT b ... LIMIT 1;

-->

SELECT
    ( SELECT a ... LIMIT 1) AS a,
    ( SELECT b ... LIMIT 1) AS b ;

Jika a adalah sesuatu seperti COUNT(*) , maka Anda tahu bahwa akan ada tepat satu hasil; maka LIMIT 1 tidak perlu.

Jika salah satu dari subkueri tersebut mungkin tidak mengembalikan baris apa pun, maka Anda mendapatkan NULL .

Teknik 2:Pilihan dapat digunakan hampir di mana saja ekspresi dapat digunakan. Di atas, secara teknis, adalah contohnya. Juga...

SELECT ... WHERE x = ( SELECT ... ) ...

Sekali lagi, subquery harus mengembalikan satu baris untuk memungkinkannya.

SELECT ...
    WHERE x LIKE CONCAT('%', ( SELECT ... ), '%')
    ...;

Itu menjadi seperti ini setelah subquery dievaluasi:

SELECT
    WHERE x LIKE '%foo%'
    ...;

(Ini tidak efisien, tetapi berhasil.)

Ketiganya serupa, tetapi tidak selalu efisien satu sama lain:

SELECT ...
    WHERE x IN ( SELECT ... )

SELECT ... FROM A
    WHERE EXISTS( SELECT ... FROM B
                  WHERE B.x = A.x )

SELECT ... FROM A JOIN B ON B.x = A.x

Ini serupa tetapi menemukan item yang cocok yang hilang dari B:

SELECT ... FROM A LEFT JOIN B ON B.x = A.x
    WHERE B.id IS NULL
    

UNION harus digunakan untuk kueri yang memiliki keluaran serupa:

SELECT x,y FROM A
UNION
SELECT x,y FROM B

Itu akan menghasilkan sejumlah baris dari A dan sejumlah baris dari B. Duplikat dihapus jika Anda menggunakan UNION DISTINCT , atau disimpan jika Anda menggunakan UNION ALL .

ORDER BY ... LIMIT ... menjadi rumit. OFFSET menjadi lebih rumit.

Kinerja

Barang-barang itu mungkin lebih penting (untuk kinerja) daripada menggabungkan pernyataan bersama-sama. Lihat https://meta.stackexchange.com/questions/ 66377/masalah-xy-apa



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah ada opsi/fitur MySQL untuk melacak riwayat perubahan pada catatan?

  2. Grup Laravel Eloquent menurut rekaman terbaru

  3. Apa saja opsi penyimpanan persisten yang bagus dan cepat untuk data kunci->nilai?

  4. Menggunakan filesort untuk mengurutkan berdasarkan kolom datetime di MySQL

  5. Apa yang setara dengan SQL Server dari INET_ATON?