【问题标题】:Inner join returns same columns from two tables access sql内连接从两个表访问sql返回相同的列
【发布时间】:2014-04-08 21:18:07
【问题描述】:

我有 2 个表,我正在使用 EID 将它们内联

CSCcode   Description   BNO        BNO-CSCcode     E_ID

05078     blah1        5430      5430-05078       1098
05026     blah2        5431      5431-05026       1077
05026     blah3        5431      5431-05026       3011
04020     blah4        8580      8580-04020       3000
07620     blah5        7560      7560-07620       7890
07620     blah6        7560      7560-07620       8560
05020     blah1        5560      5560-04020       1056

第二张桌子

        y/n        EID

          y       1056
          n       1098
          y       1077
          n       3011
          y       3000
          n       7890 
          n       8560

我从表 1 中选择所有字段,从表 2 中选择 y/n 字段。但它从表 2 中检索所有字段,包括 EID。我不想从 table2 中检索 EID,因为结果表将有两个 EID 字段。

我的查询

SELECT *, table2 .EID
FROM table1 INNER JOIN table2 ON table1 .E_ID = table2 .EID;

【问题讨论】:

    标签: sql ms-access join


    【解决方案1】:

    “我正在选择表一中的所有字段”

    不,您正在从所有表中选择所有字段。如果您只想要一张表中的所有字段,则需要指定该表:

    SELECT table1.*, table2.EID
    

    但是,使用* 并不好。最好指定您想要的字段,这样您添加到表中的任何字段都不会自动包含在内,因为这可能会破坏您的查询。

    【讨论】:

      【解决方案2】:

      您的查询正在选择两个表中的所有内容,特别是表 2 中的 EID 列。将其更改为:

      SELECT table1.*, table2.y/n
      ...
      

      尽管如其他答案所述,请避免使用*,而是列出列名table.columnName 等。

      【讨论】:

        【解决方案3】:

        指定要从中选择所有字段的表,将查询修改为

        SELECT
            table1.*, table2.EID
        FROM
            table1
            INNER JOIN table2
                ON table1.E_ID = table2.EID;
        

        如果您使用查询设计器,Access 有时会将查询的属性Output All Fields 设置为Yes。确保将其设置为 No 并手动选择所需的字段。 (右键单击设计器并在上下文菜单中选择 Properties... 以查看属性。)

        【讨论】:

          【解决方案4】:

          您有时会遇到意外* 的原因是查询设计器中的一个属性。在设计器中将此更改为No。或者,就像其他答案所说,只需从您的查询中删除 *

          【讨论】:

            【解决方案5】:

            您不能执行“SELECT *, table2 .EID”之类的操作 - 您应该包含表 1 中的所有字段。但是,即使您从一个表中进行选择,这也不是一个好习惯。

            SELECT 
               table1.CSCcode,
               table1.Descriptio,
               table1.BNO,
               table1.BNO-CSCcode,
               table1.E_ID, 
               table2 .EID
            FROM 
               table1 INNER JOIN table2 ON table1 .E_ID = table2 .EID
            

            【讨论】:

            • 这里在示例 table1 中它只有 5 列,但实际上它包含 30 多列,这就是提到 table1 中提到的所有内容 *
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-06-05
            • 2015-09-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-06-10
            相关资源
            最近更新 更多