簡體   English   中英

1052:字段列表中的列“id”不明確

[英]1052: Column 'id' in field list is ambiguous

我有 2 張桌子。 tbl_namestbl_section都包含id字段。 我如何 go 關於選擇id字段,因為我總是得到這個錯誤:

1052: Column 'id' in field list is ambiguous

這是我的查詢:

SELECT id, name, section
  FROM tbl_names, tbl_section 
 WHERE tbl_names.id = tbl_section.id

我可以只 select 所有字段並避免錯誤。 但這會浪費性能。 我應該怎么辦?

SQL 支持通過在引用前面加上完整的表名來限定列:

SELECT tbl_names.id, tbl_section.id, name, section
  FROM tbl_names
  JOIN tbl_section ON tbl_section.id = tbl_names.id 

...或表別名:

SELECT n.id, s.id, n.name, s.section
  FROM tbl_names n
  JOIN tbl_section s ON s.id = n.id 

表別名是推薦的方法——為什么輸入比你必須輸入的更多?

為什么這些查詢看起來不同?

其次,我的答案使用 ANSI-92 JOIN 語法(你的是 ANSI-89)。 雖然它們執行相同,但 ANSI-89 語法不支持 OUTER 連接(RIGHT、LEFT、FULL)。 ANSI-89 語法應被視為已棄用,SO 上有很多人不會投票支持 ANSI-89 語法來加強這一點。 有關詳細信息,請參閱此問題

在您的SELECT語句中,您需要在您的 id 前面加上您要從中選擇的表。

SELECT tbl_names.id, name, section 
FROM tbl_names
INNER JOIN tbl_section 
   ON tbl_names.id = tbl_section.id

或者

SELECT tbl_section.id, name, section 
FROM tbl_names
INNER JOIN tbl_section 
   ON tbl_names.id = tbl_section.id

您可以通過提供完全限定的名稱來做到這一點,例如:

SELECT tbl_names.id as id, name, section FROM tbl_names, tbl_section WHERE tbl_names.id = tbl_section.id

這會給你 tbl_names 的 id

最簡單的解決方案是USING而不是ON加入。 這樣,數據庫“知道”兩個id列實際上是相同的,並且不會對此進行挑剔:

SELECT id, name, section
  FROM tbl_names
  JOIN tbl_section USING (id)

如果idtbl_namestbl_section中唯一常見的列名,您甚至可以使用NATURAL JOIN

SELECT id, name, section
  FROM tbl_names
  NATURAL JOIN tbl_section

另請參閱: https://dev.mysql.com/doc/refman/5.7/en/join.html

您可能真正想要在這里做的是像這樣使用聯合運算符:

(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

這是它的文檔https://dev.mysql.com/doc/refman/5.0/en/union.html

您的問題已經有很多答案,您也可以這樣做。 您可以給您的表一個別名,並在 select 查詢中使用它,如下所示:

SELECT a.id, b.id, name, section
FROM tbl_names as a 
LEFT JOIN tbl_section as b ON a.id = b.id;

如果兩個表中 id 的格式不同,那么你想加入它們,因此你可以 select 使用一個主表中的 id,比如你有table_customestable_orders ,訂單的 id 就像“ 101 "," 102 "..." 110 ", 只給客戶一個

select customers.id, name, amount, date from customers.orders;
SELECT tbl_names.id, tbl_names.name, tbl_names.section
  FROM tbl_names, tbl_section 
 WHERE tbl_names.id = tbl_section.id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM