[英]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.