我有以下表结构:
表: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.
答案 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