Saya memiliki 2 tabel. tbl_names
dan tbl_section
yang memiliki id
bidang di dalamnya. Bagaimana cara saya memilih id
bidang, karena saya selalu mendapatkan kesalahan ini:
1052: Column 'id' in field list is ambiguous
Inilah pertanyaan saya:
SELECT id, name, section
FROM tbl_names, tbl_section
WHERE tbl_names.id = tbl_section.id
Saya bisa memilih semua bidang dan menghindari kesalahan. Tapi itu akan menjadi pemborosan dalam performa. Apa yang harus saya lakukan?
INNER JOIN
akan 'disusutkan' sejak SQL-92 diperkenalkanNATURAL JOIN
.Dalam
SELECT
pernyataan Anda, Anda perlu mengawali id Anda dengan tabel yang ingin Anda pilih.SELECT tbl_names.id, name, section FROM tbl_names INNER JOIN tbl_section ON tbl_names.id = tbl_section.id
ATAU
SELECT tbl_section.id, name, section FROM tbl_names INNER JOIN tbl_section ON tbl_names.id = tbl_section.id
sumber
id
bidang; OP menyatakan "cukup pilih semua bidang dan hindari kesalahan." Dan, saya tidak memilih sintaks ANSI-89.Anda akan melakukannya dengan memberikan nama yang memenuhi syarat, misalnya:
SELECT tbl_names.id as id, name, section FROM tbl_names, tbl_section WHERE tbl_names.id = tbl_section.id
Yang akan memberi Anda id dari tbl_names
sumber
FROM
klausa Anda...FROM tbl_names tbl_names, tbl_section tbl_section WHERE...
- itulah yang dilakukan parser untuk menghasilkan variabel rentang.Solusi paling sederhana adalah menggabungkan dengan,
USING
bukanON
. Dengan begitu, basis data "tahu" bahwa keduaid
kolom sebenarnya sama, dan tidak akan mempermasalahkannya:SELECT id, name, section FROM tbl_names JOIN tbl_section USING (id)
Jika
id
adalah satu-satunya nama kolom yang umum ditbl_names
dantbl_section
, Anda bahkan dapat menggunakanNATURAL JOIN
:SELECT id, name, section FROM tbl_names NATURAL JOIN tbl_section
Lihat juga: https://dev.mysql.com/doc/refman/5.7/en/join.html
sumber
Apa yang mungkin Anda benar-benar ingin lakukan di sini adalah menggunakan operator serikat seperti ini:
(select ID from Logo where AccountID = 1 and Rendered = 'True') union (select ID from Design where AccountID = 1 and Rendered = 'True') order by ID limit 0, 51
Berikut dokumen untuk itu https://dev.mysql.com/doc/refman/5.0/en/union.html
sumber
Sudah ada banyak jawaban untuk pertanyaan Anda, Anda juga bisa melakukannya seperti ini. Anda dapat memberi tabel Anda nama alias dan menggunakannya dalam kueri pemilihan seperti ini:
SELECT a.id, b.id, name, section FROM tbl_names as a LEFT JOIN tbl_section as b ON a.id = b.id;
sumber
Jika format id dalam dua tabel bervariasi maka Anda ingin menggabungkannya, karena itu Anda dapat memilih untuk menggunakan id dari satu tabel utama, misalnya jika Anda memiliki
table_customes
dantable_orders
, dan id untuk pesanan seperti " 101 ", " 102 " ... " 110 ", cukup gunakan satu untuk pelangganselect customers.id, name, amount, date from customers.orders;
sumber
SELECT tbl_names.id, tbl_names.name, tbl_names.section FROM tbl_names, tbl_section WHERE tbl_names.id = tbl_section.id
sumber