Sql 与内部联接一起使用时,子查询返回多个值
我使用带有内部联接的子查询,它返回10行,但我需要将这10行与另一个表匹配。 我该怎么做 以下是我的疑问:Sql 与内部联接一起使用时,子查询返回多个值,sql,subquery,Sql,Subquery,我使用带有内部联接的子查询,它返回10行,但我需要将这10行与另一个表匹配。 我该怎么做 以下是我的疑问: SELECT IT.IPTELM MOBILNO,TC.CDGACNTN GROUPACCOUNTNO, TC.CDCUSTN CUSTOMERNO, TC.PRCARDN, TC.CARDNO, TC.CRDIND, TC.Limit FROM CARDS.DBO.TOTAL_CDBS11801 TC INNER JOIN CARDS.DBO.I
SELECT
IT.IPTELM MOBILNO,TC.CDGACNTN GROUPACCOUNTNO, TC.CDCUSTN CUSTOMERNO,
TC.PRCARDN, TC.CARDNO, TC.CRDIND, TC.Limit
FROM
CARDS.DBO.TOTAL_CDBS11801 TC
INNER JOIN
CARDS.DBO.INPARTPF IT ON (SELECT DISTINCT CDCUSTN
FROM CARDS.DBO.TOTAL_CDBS11801
WHERE PRCARDN IN (SELECT PRCARDN
FROM CARDS.DBO.TOTAL_CDBS11801
WHERE CARDNO IN (SELECT *
FROM #T))
AND CRDIND ='P') = (IT.IPKIPN)
有什么想法吗?你可以像下面这样做:
select T.* from (
SELECT
IT.IPTELM MOBILNO,TC.CDGACNTN GROUPACCOUNTNO, TC.CDCUSTN CUSTOMERNO,
TC.PRCARDN, TC.CARDNO, TC.CRDIND, TC.Limit
FROM
CARDS.DBO.TOTAL_CDBS11801 TC
INNER JOIN
CARDS.DBO.INPARTPF IT ON (SELECT DISTINCT CDCUSTN
FROM CARDS.DBO.TOTAL_CDBS11801
WHERE PRCARDN IN (SELECT PRCARDN
FROM CARDS.DBO.TOTAL_CDBS11801
WHERE CARDNO IN (SELECT *
FROM #T))
AND CRDIND ='P') = (IT.IPKIPN)
) as T
inner join Table2 on your_join_condition
不要试图在你的网站上做任何事情,这就是WHERE子句的作用
SELECT
IT.IPTELM MOBILNO,TC.CDGACNTN GROUPACCOUNTNO, TC.CDCUSTN CUSTOMERNO,
TC.PRCARDN, TC.CARDNO, TC.CRDIND, TC.Limit
FROM
CARDS.DBO.TOTAL_CDBS11801 TC
INNER JOIN
CARDS.DBO.INPARTPF IT
ON TC.CDCUSTN = (IT.IPKIPN)
WHERE TC.CARDNO IN (SELECT * FROM #T) AND TC.CRDIND ='P'
允许联接匹配要联接的列中的所有内容,然后使用适当的where子句过滤掉不需要的结果。您从ON子句中的子查询中获得多个“PRCARDN”
SELECT DISTINCT CDCUSTN
FROM CARDS.DBO.TOTAL_CDBS11801
WHERE PRCARDN IN (SELECT PRCARDN
FROM CARDS.DBO.TOTAL_CDBS11801
WHERE CARDNO IN (SELECT * FROM #T))
AND CRDIND ='P'
这并不能保证给您一个单一的结果,事实上,我怀疑您是否希望,否则只有一行会有来自第二个表的数据,但您使用它的方式要求它在相等测试中返回单个值。只运行那个查询,如果它返回多个值,我打赌它可能会返回10个,因为你说#T中大约有10个值,你不能在等式测试中使用它
如果需要将结果连接到第三个表,这将成为一个子选择
SELECT
ss.IPTELM MOBILNO,ss.CDGACNTN GROUPACCOUNTNO, ss.CDCUSTN CUSTOMERNO,
ss.PRCARDN, ss.CARDNO, ss.CRDIND, ss.Limit
FROM
(SELECT *
FROM CARDS.DBO.TOTAL_CDBS11801 TC
INNER JOIN CARDS.DBO.INPARTPF IT
ON TC.CDCUSTN = (IT.IPKIPN)
WHERE TC.CARDNO IN (SELECT * FROM #T) AND TC.CRDIND ='P') ss
INNER JOIN yourTable yt
ON ss.X = yt.Y
谢谢你的支持。
事实上,我的问题是,我想要一级卡号的手机号码和二级卡号的手机号码。
场景是我有两个表CARDS.DBO.TOTAL\u CDBS11801和CARDS.DBO.INPARTPFCARDS.DBO.TOTAL_CDBS11801有“Sec_card_number”、“Pri_card_numb”和“Customer_number”等列,在该表中,“Sec_card_number”和“Pri_card_numb”的客户编号不同,因此我需要根据“Sec_card_number”提取“Pri_card_numb”,然后将该“Pri_card_numb”的“Customer_number”与另一个具有“Customer_number”和“Mobile_number”列的表CARDS.DBO.INPARTPF连接起来。
我已经使用下面的查询实现了所需的场景
SELECT SCD.SECONDARY_CARD_NUMBER,IT.IPTELM
FROM dbo.BI_SecondaryCardDetails SCD
INNER JOIN CARDS.DBO.TOTAL_CDBS11801 SC ON SCD.SECONDARY_CARD_NUMBER=SC.CARDNO
INNER JOIN CARDS.DBO.TOTAL_CDBS11801 PC ON SC.PRCARDN=PC.CARDNO
INNER JOIN CARDS.DBO.INPARTPF IT ON PC.CDCUSTN=IT.IPKIPN
这是用于哪个RDBMS的?请添加一个标记,以指定您使用的是
mysql
、postgresql
、sql server
、oracle
还是db2
-或其他完全不同的东西。我想您应该给我们一些关于预期输出的信息,以及它是如何成为您的正常数据的信息?我已经将其标记到sql,好心的check@HarunKARATAŞ我只想将子查询的结果连接到IPKIPN并获得结果。但这是上面发布的错误,我认为派生表或CTE对您更有意义。您在描述连接的同时,实际上以一种奇怪的方式使用连接条件。这里似乎没有TC和IT之间的关系,那么为什么要加入呢?它不起作用。仍然提供相同的errorSubquery返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时。这是什么#T
?