Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL Server中搜索表两次_Sql_Sql Server - Fatal编程技术网

在SQL Server中搜索表两次

在SQL Server中搜索表两次,sql,sql-server,Sql,Sql Server,我已经多次遇到这个问题,我不知道如何解决它。我有一个查询,需要访问同一个表两次,以选择两个不同的人:顾问和客户联系人 顾问+客户查询如下所示 select CRM7.contact.contact_id as CustomerID, CRM7.contact.name + ' ' + CRM7.person.firstname + ' ' + CRM7.person.LASTNAME as CustomerName, CRM7.person.firstname +

我已经多次遇到这个问题,我不知道如何解决它。我有一个查询,需要访问同一个表两次,以选择两个不同的人:顾问和客户联系人

顾问+客户查询如下所示

select 
    CRM7.contact.contact_id as CustomerID, 
    CRM7.contact.name + ' ' + CRM7.person.firstname + ' ' + CRM7.person.LASTNAME as CustomerName, 
    CRM7.person.firstname + ' ' + CRM7.person.lastname as ConsultantName,
    CRM7.udcontactsmall.long08 as WriteLic, 
    CRM7.udcontactsmall.long17 as ReadLic, 
    CRM7.udcontactsmall.long09 as HasMaint, 
    CRM7.udlist.name as BCVer 
from 
    CRM7.contact,
    CRM7.udcontactsmall 
left join 
    CRM7.associate on CRM7.udcontactsmall.long11 = CRM7.associate.associate_id 
left join 
    CRM7.person on CRM7.associate.person_id = CRM7.person.person_id 
left join 
    CRM7.udlist on CRM7.udcontactsmall.long07 = CRM7.udlist.UDList_id 
where 
    CRM7.contact.category_idx = '2' and
    CRM7.contact.userdef_id = CRM7.udcontactsmall.udcontactsmall_id
order by 
    CRM7.contact.name
SELECT  
    C.NAME+' Kontakt '+ P.FIRSTNAME+' '+P.LASTNAME AS CONTACT
FROM 
    CRM7.PERSON P
LEFT OUTER JOIN 
    CRM7.CONTACT C ON P.CONTACT_ID = C.CONTACT_ID
WHERE 
    C.CATEGORY_IDX IN ('2','5') 
    AND P.RETIRED = 0  
ORDER BY 
    C.NAME, P.LASTNAME, P.FIRSTNAME
每个客户的联系方式如下所示

select 
    CRM7.contact.contact_id as CustomerID, 
    CRM7.contact.name + ' ' + CRM7.person.firstname + ' ' + CRM7.person.LASTNAME as CustomerName, 
    CRM7.person.firstname + ' ' + CRM7.person.lastname as ConsultantName,
    CRM7.udcontactsmall.long08 as WriteLic, 
    CRM7.udcontactsmall.long17 as ReadLic, 
    CRM7.udcontactsmall.long09 as HasMaint, 
    CRM7.udlist.name as BCVer 
from 
    CRM7.contact,
    CRM7.udcontactsmall 
left join 
    CRM7.associate on CRM7.udcontactsmall.long11 = CRM7.associate.associate_id 
left join 
    CRM7.person on CRM7.associate.person_id = CRM7.person.person_id 
left join 
    CRM7.udlist on CRM7.udcontactsmall.long07 = CRM7.udlist.UDList_id 
where 
    CRM7.contact.category_idx = '2' and
    CRM7.contact.userdef_id = CRM7.udcontactsmall.udcontactsmall_id
order by 
    CRM7.contact.name
SELECT  
    C.NAME+' Kontakt '+ P.FIRSTNAME+' '+P.LASTNAME AS CONTACT
FROM 
    CRM7.PERSON P
LEFT OUTER JOIN 
    CRM7.CONTACT C ON P.CONTACT_ID = C.CONTACT_ID
WHERE 
    C.CATEGORY_IDX IN ('2','5') 
    AND P.RETIRED = 0  
ORDER BY 
    C.NAME, P.LASTNAME, P.FIRSTNAME
数据集:


如何获得同时返回客户顾问和客户联系人的查询?

这应该符合您的目的:

select 
    CRM7.contact.contact_id as CustomerID
    ,CRM7.contact.name+' '+CRM7.person.firstname+' '+CRM7.person.LASTNAME as CustomerName
    ,CRM7.person.firstname+' '+CRM7.person.lastname as ConsultantName
    ,CRM7.udcontactsmall.long08 as WriteLic
    ,CRM7.udcontactsmall.long17 as ReadLic
    ,CRM7.udcontactsmall.long09 as HasMaint
    ,CRM7.udlist.name as BCVer 
    ,C.NAME+' Kontakt '+ CRM7.person.FIRSTNAME+' '+ CRM7.person.LASTNAME AS CONTACT
from 
    CRM7.contact
    ,CRM7.udcontactsmall 
    left join CRM7.associate on CRM7.udcontactsmall.long11=CRM7.associate.associate_id 
    left join CRM7.person on CRM7.associate.person_id=CRM7.person.person_id 
    left join CRM7.udlist on CRM7.udcontactsmall.long07=CRM7.udlist.UDList_id 
    LEFT OUTER JOIN (SELECT CONTACT_ID,NAME FROM CRM7.CONTACT WHERE CATEGORY_IDX in ('2','5') AND P.RETIRED=0) C ON CRM7.person.CONTACT_ID=C.CONTACT_ID
where 
    CRM7.contact.category_idx='2' 
    and CRM7.contact.userdef_id=CRM7.udcontactsmall.udcontactsmall_id 
order by 
    CRM7.contact.name
我使用了第二个查询中联系人表的联接,并将其添加到第一个查询中以获取客户联系人:

LEFT OUTER JOIN 
    (SELECT CONTACT_ID, NAME 
     FROM CRM7.CONTACT 
     WHERE CATEGORY_IDX IN ('2','5') AND P.RETIRED = 0) C ON CRM7.person.CONTACT_ID = C.CONTACT_ID

这应该符合你的目的:

select 
    CRM7.contact.contact_id as CustomerID
    ,CRM7.contact.name+' '+CRM7.person.firstname+' '+CRM7.person.LASTNAME as CustomerName
    ,CRM7.person.firstname+' '+CRM7.person.lastname as ConsultantName
    ,CRM7.udcontactsmall.long08 as WriteLic
    ,CRM7.udcontactsmall.long17 as ReadLic
    ,CRM7.udcontactsmall.long09 as HasMaint
    ,CRM7.udlist.name as BCVer 
    ,C.NAME+' Kontakt '+ CRM7.person.FIRSTNAME+' '+ CRM7.person.LASTNAME AS CONTACT
from 
    CRM7.contact
    ,CRM7.udcontactsmall 
    left join CRM7.associate on CRM7.udcontactsmall.long11=CRM7.associate.associate_id 
    left join CRM7.person on CRM7.associate.person_id=CRM7.person.person_id 
    left join CRM7.udlist on CRM7.udcontactsmall.long07=CRM7.udlist.UDList_id 
    LEFT OUTER JOIN (SELECT CONTACT_ID,NAME FROM CRM7.CONTACT WHERE CATEGORY_IDX in ('2','5') AND P.RETIRED=0) C ON CRM7.person.CONTACT_ID=C.CONTACT_ID
where 
    CRM7.contact.category_idx='2' 
    and CRM7.contact.userdef_id=CRM7.udcontactsmall.udcontactsmall_id 
order by 
    CRM7.contact.name
我使用了第二个查询中联系人表的联接,并将其添加到第一个查询中以获取客户联系人:

LEFT OUTER JOIN 
    (SELECT CONTACT_ID, NAME 
     FROM CRM7.CONTACT 
     WHERE CATEGORY_IDX IN ('2','5') AND P.RETIRED = 0) C ON CRM7.person.CONTACT_ID = C.CONTACT_ID


如果确实需要左连接,请不要将这些右侧表条件放在WHERE子句中。如果您这样做,您将获得内部连接行为。转到ON子句以获得真正的左连接执行。好奇为什么您将顾问和客户存储在同一个位置table@jarlh-如您所见,where子句对使用左联接联接的表没有任何条件,因此尽管您的语句为true,在这种情况下不会有任何效果。您确实需要停止使用旧式联接。较新的连接语法已经存在了25年多了。其中C.CATEGORY_IDX在'2'和'5'中。。。使左联接成为内部联接。如果确实需要左联接,请不要将这些右侧表条件放在WHERE子句中。如果您这样做,您将获得内部连接行为。转到ON子句以获得真正的左连接执行。好奇为什么您将顾问和客户存储在同一个位置table@jarlh-如您所见,where子句对使用左联接联接的表没有任何条件,因此尽管您的语句为true,在这种情况下不会有任何效果。您确实需要停止使用旧式联接。较新的连接语法已经存在了25年多了。其中C.CATEGORY_IDX在'2'和'5'中。。。使该左连接成为内部连接。嗨,我不需要左外部连接CRM7.CONTACT C ON P.CONTACT_ID=C.CONTACT_ID在该左外部连接中才能工作?是的,我现在知道了。它给出了一个错误无效的列名“Retired”-删除它会运行查询,并给出空值。按此方式尝试左外部联接选择联系人\u ID,来自CRM7的名称。联系人,其中类别\u IDX在“2”中,CRM7.person.CONTACT_ID=C.CONTACT_ID和CRM7.person.FIRSTNAME+''+CRM7.person.LASTNAME作为联系人这让我觉得顾问很好。我明白了为什么退休字段会出现错误。它属于不在子查询中的人。在我看来,它应该有效,我应该接待客户而不是顾问,但我只是再次得到顾问。是因为CRM7.person.CONTACT\u ID使用了旧值吗?嗨,我不需要左侧外部连接CRM7.CONTACT C ON P.CONTACT\u ID=C.CONTACT\u ID在该左侧外部连接中才能工作吗?是的,我现在明白了。它给出了一个错误无效的列名“Retired”-删除它会运行查询,并给出空值。按此方式尝试左外部联接选择联系人\u ID,来自CRM7的名称。联系人,其中类别\u IDX在“2”中,CRM7.person.CONTACT_ID=C.CONTACT_ID和CRM7.person.FIRSTNAME+''+CRM7.person.LASTNAME作为联系人这让我觉得顾问很好。我明白了为什么退休字段会出现错误。它属于不在子查询中的人。在我看来,它应该有效,我应该接待客户而不是顾问,但我只是再次得到顾问。是因为CRM7.person.CONTACT_ID使用了旧值吗?