我有一个链接到sql DB的程序,包含2个表 - SInfo
和CUSTOMERID (Primary Key)
FIRSTNAME
LASTNAME
EMAIL
。
客户拥有正常的列:
SSheetID (Primary Key)
CustomerID
SerialNumber
SInfo有关于客户的详细信息:
inner join
当我在.net中使用查询构建器时,我使用distinct
来组合表,并使用过滤器来搜索序列号,但是当主键显示更多时我收到错误不止一次。
我尝试使用GROUP BY
,但如果一个字段不同,我会收到错误,而 $scope.Users = "";
$scope.click = function () {
var _reqObj = new Object();
_reqObj.Name = $scope.dropdown;
_reqObj.Meth = "PD";
$.ajax({
method: 'POST',
url: 'WebForm1.aspx',
data: _reqObj,
success: function (response) {
$scope.Users = response;
//double click disable purpose
$scope.$apply(function () {
$location.path("/PD"); });
}
});
}
正在杀死我。
所以我的问题是,如果客户(CustomerID)具有多次相同的序列号,那么最佳做法是什么,但我只想显示一次CustomerID,但仍然填写FirstName,LastName,Email?< / p>
感谢任何帮助。
答案 0 :(得分:1)
就像Turophile所说的那样我觉得SInfo表中的数据有问题。所以你应该先做的就是先清理SInfo表,或者你可以试试这个:
select a.CustomerID,a.SerialNumber,b.FirstName from
(select distinct (CustomerID),SerialNumber from SInfo)a
inner join Customers b on a.CustomerID = b.CustomerID
答案 1 :(得分:1)
您可以在这种情况下使用自然联接,因为当您使用自然联接时,它将匹配具有相同客户ID的人,然后使用GROUP BY,这样它将显示一次名称。
select first_name, last_name, email
from customer natural join Sinfo
group by customerID, first_name, last_name, email
答案 2 :(得分:0)
各种选择......
通过distinct
:
select distinct c.* -- or better: more specific c. columns
from SInfo s
inner join Customers c on c.CUSTOMERID = s.CustomerID
where s.SerialNumber = @serial
通过exists
:
select *
from Customers c
where exists (
select 1 from SInfo s
where s.CustomerID = c.CUSTOMERID
and s.SerialNumber = @serial)
但正如评论中所述:SInfo.SerialNumber
上的唯一约束,或者可能跨越SInfo.SerialNumber and SInfo.CustomerID
- 可能是有道理的。