繁体   English   中英

内部联接从两个表访问sql返回相同的列

[英]Inner join returns same columns from two tables access sql

我有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;

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

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

SELECT table1.*, table2.EID

但是,使用*不是很好的方法。 最好指定所需的字段,以免自动添加到表中的任何字段,因为这可能会打乱查询。

您不能执行类似“ 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

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

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

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

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

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

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

有时您会感到惊讶*的原因是由于查询设计器中的一个属性。 在设计器中将此更改为“ No ”。 另外,就像其他答案一样,只需从查询中删除*

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM