【发布时间】:2016-12-09 01:13:06
【问题描述】:
我正在使用 sql 在 Excel 中创建自定义 ODBC 查询。
我有 2 个表 'TBL_CONTACT' 和 'TBL_ADDRESS' 我想在 'contactid' 上进行 INNER JOIN,这是两个都存在的列。
如果我选择所有列,这工作正常,但如果我开始定义我想要显示的列,则停止工作。
工作代码:
SELECT * FROM "TBL_CONTACT" AS CONTACT
INNER JOIN (SELECT * FROM "TBL_ADDRESS" AS ADDRESS) ADDRESS
ON CONTACT.contactid = ADDRESS.contactid
非工作代码:
SELECT CONTACT.contactid, CONTACT.fullname FROM "TBL_CONTACT" AS CONTACT
INNER JOIN (SELECT * FROM "TBL_ADDRESS" AS ADDRESS) ADDRESS
ON CONTACT.contactid = ADDRESS.contactid
这仅显示“TBL_CONTACT”中的“contactid”和“fullname”列,不加入“TBL_ADDRESS”中的任何内容。
示例:
TBL_CONTACT
contactid firstname fullname
1001 John John Smith
1002 Tom Tom Adams
TBL_ADDRESS
contactid line1 line2 postcode
1001 3 Farm Ln Essex AB1 1BA
1002 1 Tim st Kent CN2 2NC
想要的结果:
contactid fullname contactid2 line1 line2 postcode
1001 John Smith 1001 3 Farm Ln Essex AB1 1BA
1002 Tom Adams 1002 1 Tim st Kent CN2 2NC
第一个代码给出以下结果:
contactid firstname fullname contactid2 line1 line2 postcode
1001 John John Smith 1001 3 Farm Ln Essex AB1 1BA
1002 Tom Tom Adams 1002 1 Tim st Kent CN2 2NC
第二个代码给出以下结果:
contactid fullname
1001 John Smith
1002 Tom Adams
我对 SQL 还很陌生,但不确定我在这里做错了什么。任何帮助将不胜感激!
【问题讨论】:
-
编辑您的问题并提供示例数据和所需的结果。您的描述不能很好地传达问题,尤其是因为这两个查询都有效。
-
并在
SELECT语句中的字段名前写表名:SELECT TBL_CONTACT.contactid, TBL_CONTACT.fullname, TBL_ADDRESS.contactid, TBL_ADDRESS.fullname -
在列中指定别名
-
第一个查询根本不应该运行,
"DATABASE"是什么?当然,当您不在 SELECT 中列出它们时,您不会从第二个表中获取列 -
当您有两个(或更多)列同名时,您必须对它们进行限定,例如
TBL_CONTACT.contactid.
标签: sql sql-server database odbc inner-join