SQL联接在定义表列时停止工作

时间:2016-08-03 10:50:33

标签: sql sql-server database odbc inner-join

我正在使用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很新,但我不确定我在这里做错了什么。任何帮助将不胜感激!

4 个答案:

答案 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;