我正在使用sql在Excel中创建自定义ODBC查询。
我有两个表'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很新,但我不确定我在这里做错了什么。任何帮助将不胜感激!
答案 0 :(得分:1)
加入表会导致列可用于您的选择。当您选择所有列(在第一个代码段中使用*
)时,也会选择已加入表格的列。但是,在手动选择列时,您还必须从连接表中定义所需的列。
假设您希望表TBL_CONTACT中包含2列 contactid 和 fullname ,以及来自连接表TBL_ADDRESS的所有列:
SELECT `TBL_CONTACT`.`contactid`, `TBL_CONTACT`.`fullname`, `TBL_ADDRESS`.* FROM TBL_CONTACT
INNER JOIN TBL_ADDRESS
ON `TBL_CONTACT`.`contactid` = `TBL_ADDRESS`.`contactid`
反引号是可选的。
或者,您也可以为连接表指定列。
答案 1 :(得分:0)
试试这个
//MySQL
SELECT TC.contactid,TC.fullname,TA.`address_table_column`
FROM TBL_CONTACT TC
INNER JOIN TBL_ADDRESS TA
ON TC.contactid = TA.contactid
//SQL Server
SELECT TC.contactid,TC.fullname,TA.[address_table_column]
FROM TBL_CONTACT TC
INNER JOIN TBL_ADDRESS TA
ON TC.contactid = TA.contactid
答案 2 :(得分:0)
您已加入多个表并选择了一些必须指定的字段 该字段属于哪个表。
因为在你的情况下,同一个字段可以在两个表中,然后mysql不知道要获取哪个。
所以只需在查询中使用表格前缀,当然SELECT
使用您想要的所有字段:
SELECT `TBL_CONTACT`.`contactid`,`TBL_CONTACT`.`fullname`,`TBL_ADDRESS`.`contactid` as contactid2,`TBL_ADDRESS`.`line1`,`TBL_ADDRESS`.`line2`,`TBL_ADDRESS`.`postcode` FROM `TBL_CONTACT`
INNER JOIN `TBL_ADDRESS`
ON `TBL_CONTACT`.`contactid` = `TBL_ADDRESS`.`contactid`
答案 3 :(得分:0)
SELECT contact.*, ADDRESS.* FROM "TBL_CONTACT" contact INNER JOIN "TBL_ADDRESS" ADDRESS ON contact.contactid = ADDRESS.contactid;