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

Pemicu tidak mengenali tabel (Pemicu untuk memecah konten NEW.values ​​menjadi beberapa baris untuk dimasukkan ke tabel lain)

jika Anda hanya mencoba untuk memecahkan string, Anda bisa melakukan hardcode 1 dan 2 di sana seperti ini dan tidak perlu mengambil 1 dan 2 di tabel angka karena tabel itu saat ini di-hardcode untuk berisi 1 dan 2.

SET @V = SUBSTRING_INDEX(SUBSTRING_INDEX(new.Vu, ' ', 1), ' ', -1),
    @U = SUBSTRING_INDEX(SUBSTRING_INDEX(new.Vu, ' ', 2), ' ', -1);

sqlfiddle

tetapi kemudian saya perhatikan Anda bahkan tidak perlu memanggil SUBSTRING_INDEX() dua kali..ini juga berfungsi

    SET @V = SUBSTRING_INDEX(new.Vu, ' ', 1),
        @U = SUBSTRING_INDEX(new.Vu,' ', -1);

sqlfiddle

PERBARUI setelah melihat komentar Anda, saya mengerti mengapa Anda ingin membuat tabel numbers jadi pemicu Anda akan menjadi seperti ini. Pertama, Anda membuat tabel numbers yang berisi baris yang memiliki n nilai dari 1 hingga 10 (kemungkinan jumlah maksimum bidang untuk dipecah menjadi baris). Kemudian Anda memilih dari numbers di mana nilai n adalah <=jumlah bidang di nomor Anda. Kemudian terapkan fungsi SUBSTRING_INDEX() untuk mendapatkan bidang pada posisi n.

create table numbers 
select 1 as n 
union select 2 
union select 3
union select 4
union select 5
union select 6
union select 7
union select 8
union select 9
union select 10;

CREATE TRIGGER `edit2` AFTER INSERT 
ON `table1` 
FOR EACH ROW BEGIN 

    INSERT INTO table2 (number,player,team,position)
    SELECT 
    SUBSTRING_INDEX(SUBSTRING_INDEX(NEW.number,' ',n),' ',-1) as number,
    NEW.player as player,
    SUBSTRING_INDEX(SUBSTRING_INDEX(NEW.team,', ',n),', ',-1) as team,
    SUBSTRING_INDEX(SUBSTRING_INDEX(NEW.position,' ',n),' ',-1) as position
    FROM
    numbers n
    WHERE LENGTH(NEW.number)
             - LENGTH(REPLACE(NEW.number,' ',''))
             + 1 >= n.n;

END

sqlfiddle untuk melihat pemicu beraksi




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Peringatan:mysql_num_rows() mengharapkan parameter 1 menjadi sumber daya, boolean diberikan di /home/folder/public_html/folder/folder/login.php pada baris 18

  2. MySQL - Dapatkan penghitung untuk setiap nilai duplikat

  3. beberapa INSERTS dan menjaga keamanan pernyataan yang disiapkan PDO

  4. kesalahan:Skrip pengaturan keluar dengan kesalahan:perintah 'gcc' gagal dengan status keluar 1

  5. Apa perbedaan antara backtick dan kutipan tunggal? Bisakah saya menggunakan pernyataan IF dalam kueri seperti di atas?