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

Gunakan satu kueri untuk menarik dari beberapa tabel

Anda harus dapat mencapai ini dengan self-join, seperti :

SELECT DISTINCT e2.eventId
FROM event_tags e1
INNER JOIN event_tags e2 
    ON e2.tagName LIKE CONCAT('%', e1.tagName, '%') AND e2.eventId != e1.eventId
WHERE e1.eventId = {}

Saya perhatikan bahwa kueri kedua memiliki LIMIT 3 ayat. Pertama-tama, harap perhatikan bahwa tanpa ORDER BY klausa ini tidak menghasilkan hasil yang dapat diprediksi. Berikut adalah solusi berdasarkan fungsi jendela ROW_NUMBER() (tersedia di MySQL 8), yang akan menghasilkan tidak lebih dari 3 event_id untuk setiap tag yang cocok :

SELECT DISTINCT event_id FROM (
    SELECT e2.eventId, ROW_NUMBER() OVER(PARTITION BY e1.eventId ORDER BY e2.eventId) rn
    FROM event_tags e1
    INNER JOIN event_tags e2 
        ON e2.tagName LIKE CONCAT('%', e1.tagName, '%') AND e2.eventId != e1.eventId
    WHERE e1.eventId = {}
) WHERE rn <= 3



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Penggabungan MySQL dan campuran ilegal dari kesalahan collation

  2. SQLite di Android:Kunci Asing dan <table constraint> diharapkan

  3. Bagaimana cara menghubungkan MySQL dengan Java?

  4. Masukkan massal dan dapatkan kembali id ​​laravel

  5. Bagaimana saya bisa mengubah varchar(255) yang diindeks dari utf8 ke utf8mb4 dan masih tetap di bawah 767 panjang kunci maks?