1052: Column 'id' in field list is ambiguous

匿名 (未验证) 提交于 2019-12-03 02:05:01

问题:

I have 2 tables. tbl_names and tbl_section which has both the id field in them. How do I go about selecting the id field, because I always get this error:

1052: Column 'id' in field list is ambiguous 

Here's my query:

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

I could just select all the fields and avoid the error. But that would be a waste in performance. What should I do?

回答1:

SQL supports qualifying a column by prefixing the reference with either the full table name:

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

...or a table alias:

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

The table alias is the recommended approach -- why type more than you have to?

Why Do These Queries Look Different?

Secondly, my answers use ANSI-92 JOIN syntax (yours is ANSI-89). While they perform the same, ANSI-89 syntax does not support OUTER joins (RIGHT, LEFT, FULL). ANSI-89 syntax should be considered deprecated, there are many on SO who will not vote for ANSI-89 syntax to reinforce that. For more information, see this question.



回答2:

In your SELECT statement you need to preface your id with the table you want to choose it from.

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

OR

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


回答3:

You would do that by providing a fully qualified name, e.g.:

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

Which would give you the id of tbl_names



回答4:

Already there are lots of answers to your question, You can do it like this also. You can give your table an alias name and use that in the select query like this:

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


回答5:

What you are probably really wanting to do here is use the union operator like this:

(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 

Here's the docs for it https://dev.mysql.com/doc/refman/5.0/en/union.html



回答6:

If the format of the id's in the two table varies then you want to join them, as such you can select to use an id from one-main table, say if you have table_customes and table_orders, and tha id for orders is like "101","102"..."110", just use one for customers

select customers.id, name, amount, date from customers.orders; 


回答7:

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!