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

Bagaimana mysql mendefinisikan DISTINCT() dalam dokumentasi referensi

Demi kelengkapan, saya menjawab milik saya sendiri dan menautkan ke pertanyaan milik saya sendiri. Tampaknya perilaku ini merupakan konsekuensi langsung dari standar SQL yang mengizinkan spasi putih antara fungsi dan tanda kurung.

Karena (umumnya) diperbolehkan untuk mengatakan FUNCTION_NAME (x) maka ketika fungsi ini diterapkan pada istilah pertama pilih

SELECT FUNCTION_NAME (x)

maka parser akan kesulitan menentukan apakah ini adalah konteks nama fungsi atau kata kunci pengubah SELECT.

Jadi dalam kasus di atas FUNCTION_NAME sebenarnya adalah FUNCTION_NAME_OR_KEYWORD untuk parser.

Tetapi lebih jauh:karena spasi antara nama fungsi dan tanda kurung diperbolehkan, parser sebenarnya TIDAK dapat membedakan antara

SELECT FUNCTION_NAME_OR_KEYWORD (x)

dan

SELECT FUNCTION_NAME_OR_KEYWORD(x)

(itu harus menguji kata kunci untuk melihat apakah itu fungsi), dan karena (x) akan diuraikan ke x, maka untuk FUNCTION_NAME_OR_KEYWORD -> DISTINCT (dan semua kata kunci pengubah SELECT lainnya) tidak ada perbedaan antara

SELECT DISTINCT x, y, z, ...

dan

SELECT DISTINCT(x), y, z, ...

QED, tetapi tanpa referensi keras (asumsi bahwa standar tidak peduli tentang spasi putih antara nama fungsi dan tanda kurung, saya yakin, dibenarkan, tetapi saya tidak dapat mengikuti tata bahasa BNF sampai-sampai saya dapat mengutip aturan yang tepat).

CATATAN:mysql memiliki sejumlah fungsi di mana ia peduli dengan spasi putih antara fungsi dan tanda kurung, tapi saya percaya bahwa ini adalah pengecualian (maka opsi server untuk mengabaikannya)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Deteksi jika nilainya adalah angka di MySQL

  2. Optimalkan panggilan data di JDBC ke JTable

  3. Periksa apakah ada baris, Laravel

  4. SYSDATE() vs NOW() di MySQL:Apa Bedanya?

  5. MySQL mengonversi tipe data kolom dari VARCHAR ke INT