Rumah  >  Soal Jawab  >  teks badan

Penyelesaian masalah Mariadb menggunakan CREATE TABLE SELECT UNION

<p>Saya sedang mengusahakan skrip PHP yang mengandungi enam UNION SELECT dan dalam skrip arahan ini berfungsi dengan baik. Perintah ini juga berfungsi dengan baik apabila dilaksanakan daripada klien SQL. Walau bagaimanapun, apabila saya cuba meletakkan pernyataan SELECT di dalam CREATE TABLE mytable SELECT, saya mendapat mesej ralat berikut: </p> <pre class="brush:php;toolbar:false;">Nama lajur tidak betul ''</pre> <p>Dalam lima daripada enam serpihan UNION SELECT, terdapat nama lajur bernama '', yang digunakan sebagai ruang letak semasa mengisi data dalam bahagian skrip yang berikutnya. Tetapi dalam salah satu KESATUAN, kedudukan yang sama ialah lajur varchar(32). <br /><br />Nampaknya kewujudan lajur "tanpa nama" tidak penting dalam pelaksanaan biasa arahan itu. Tetapi dalam versi CREATE TABLE, ia tidak menyukai ini. <br /><br />Mengapakah SELECT dan CREATE TABLE SELECT mempunyai peraturan yang berbeza untuk nama lajur kesatuan? </p><p><br /></p>
P粉115840076P粉115840076417 hari yang lalu504

membalas semua(1)saya akan balas

  • P粉821231319

    P粉8212313192023-08-03 09:31:45

    Jadual tidak boleh mengandungi nama lajur kosong atau tiada, manakala set hasil boleh. Pernyataan CREATE TABLE SELECT memperoleh nama lajur jadual daripada set hasil pernyataan SELECT. Oleh itu, anda perlu memastikan bahawa setiap lajur set hasil mempunyai nama, sama ada diperoleh daripada lajur dalam beberapa jadual atau ditentukan melalui alias AS. Contohnya,

    SELECT 'one' AS tablename, cola, colb, colc FROM table_one
     UNION ALL
    SELECT 'two',              cola, colb, colc FROM table_two
     UNION ALL
    SELECT 'three',            cola, colb, colc FROM table_three
    

    terpakai pada kenyataan CREATE TABLE, manakala

    SELECT 'one',   cola, colb, colc FROM table_one
     UNION ALL
    SELECT 'two',   cola, colb, colc FROM table_two
     UNION ALL
    SELECT 'three', cola, colb, colc FROM table_three
    

    Tidak berkenaan kerana ia tidak memberikan nama lajur alias pada lajur pertama.

    balas
    0
  • Batalbalas