[英]sql server inner join two tables and filter with two fields, getting extra records
我在获取两个表之间的INNER JOIN SELECT以获取正确的输出时遇到问题。
SELECT *
FROM PERSON_TABLE
WHERE MYSOMETHINGID = 123
结果是
ID PERSON_ID PERSON IS_SELECTED IS_BACKUP MYSOMETHINGID
2 -1 PERSON1 0 0 123
3 12 PERSON2 0 1 123
4 13 PERSON3 1 0 123
5 15 PERSON4 0 1 123
6 22 PERSON5 0 0 123
select *
from ASSIGNED_TABLE
where MYSOMETHINGID = 123
ID PERSON_ID PERSON MYSOMETHINGID
3 12 PERSON2 123
4 13 PERSON3 123
5 15 PERSON4 123
我想内部加入两家公司,并且仅选择IS_SELECTED = 1的记录,以及ASSIGNED_TABLE中是否存在PERSON_TABLE的记录
这是我的查询
select *
from ASSIGNED_TABLE AT inner join
PERSON_TABLE PT
on PT.IS_SELECTED = 1 AND AT.PERSON_ID = PT.PERSON_ID
where AT.MYSOMETHINGID = 123
ID PERSON_ID PERSON MYSOMETHINGID IS_SELECTED IS_BACKUP
3 12 PERSON2 123 1 0
4 13 PERSON3 123 1 0
5 15 PERSON4 123 1 0
我期待PERSON13,因为它是唯一具有IS_SELECTED = 1的记录。我不明白为什么我得到3条记录而不是1条记录,而奇怪的是,IS_SELECTED的所有3条记录均为1条,所有的IS_BACKUP为0条
任何帮助是极大的赞赏。 谢谢。
我认为您还需要加入mysomethingid
:
select *
from ASSIGNED_TABLE AT inner join
PERSON_TABLE PT
on PT.IS_SELECTED = 1 AND
AT.PERSON_ID = PT.PERSON_ID AND
AT.MYSOMETHINGID = PT.MYSOMETHINGID
where AT.MYSOMETHINGID = 123;
尝试这个
select *
from ASSIGNED_TABLE AT
inner join PERSON_TABLE PT
on AT.PERSON_ID = PT.PERSON_ID
where PT.IS_SELECTED = 1 AND MYSOMETHINGID = 123
另一种方法是仅选择is_selected = 1的行
select *
from ASSIGNED_TABLE AT inner join
PERSON_TABLE PT ON
AT.PERSON_ID = PT.PERSON_ID
where AT.MYSOMETHINGID = 123 AND PT.IS_SELECTED = 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.