在SQL Join中匹配两个列

时间:2012-10-28 13:55:42

标签: sql sql-server

我有以下表结构:

表:CashStatus(“ATM”可以有重复的条目)

ATM  Cash   Device
A01  55     BASE
A01  1      IST
A02  1      BASE
A02  78     IST

表:ATM(ATM列的唯一条目)

ATM   DEVICE
A01   BASE
A02   IST

我想只检索CashStatus表中ATM & Device列与ATM表匹配的那些行表

我做了一些研究并尝试了以下查询: -

SELECT *
  FROM CashStatus 
 WHERE EXISTS (SELECT 'X'
                 FROM ATM
                WHERE ATM = TermId collate SQL_Latin1_General_CP1_CI_AS
               AND DeviceName = Devicetype collate SQL_Latin1_General_CP1_CI_AS);

但它会出错:Expression type int is invalid for COLLATE clause.

4 个答案:

答案 0 :(得分:3)

SELECT columnLists
FROM CashStatus cs JOIN ATM a ON cs.ATM = a.ATM AND cs.Device = a.Device

COLLATE是一个用于更改列的语言归类的关键字;它在数值数据类型上是不必要的,在这里可能是不必要的(因为你从一种语言改为同一种语言)。

答案 1 :(得分:2)

您应该能够使用2列连接两个表:

SELECT a.*
FROM CashStatus a
INNER JOIN ATM b ON a.ATM = b.ATM AND a.DEVICE = b.DEVICE

这会给你想要的结果吗?

答案 2 :(得分:1)

SELECT *
FROM CashStatus
LEFT JOIN ATM ON CASHSTATUS.ATM=ATM.ATM and CASHSTATUS.DEVIDE=ATM.DEVICE

答案 3 :(得分:0)

有几个基本上相同的答案,每个都接受一个神秘的评论,结果不是所希望的。也许您可以提供正确输出的示例。以下是一个完整的示例:

declare @CashStatus as Table ( ATM VarChar(3), Cash Int, Device VarChar(4) )
insert into @CashStatus ( ATM, Cash, Device ) values
  ( 'A01', 55, 'BASE' ),
  ( 'A01',  1, 'IST' ),
  ( 'A02',  1, 'BASE' ),
  ( 'A02', 78, 'IST' )

declare @ATM as Table ( ATM VarChar(3), Device VarChar(4) )
insert into @ATM ( ATM, Device ) values
  ( 'A01', 'BASE' ),
  ( 'A02', 'IST' )

select CS.ATM, CS.Cash, CS.Device
  from @CashStatus as CS inner join
    @ATM as A on A.ATM = CS.ATM and A.Device = CS.Device