SQL查询未按预期显示

时间:2013-12-02 15:04:51

标签: sql sql-server-2012

我正在尝试通过加入两个表Customer和Transaction来查找客户未进行任何交易的位置。但是,我的查询没有返回任何值。

SELECT
[CUST].[CustID],
[CUST].[CustName]
FROM [Cust]
INNER JOIN [TRANS]
ON [CUST].[CustID] = [TRANS].[CustID]
WHERE [CUST].[CustID] != [TRANS].[CustID]

2 个答案:

答案 0 :(得分:2)

你在做什么和做的一样:

SELECT [CUST].[CustID],
       [CUST].[CustName]
FROM [Cust]
INNER JOIN [TRANS]
    ON [CUST].[CustID] = [TRANS].[CustID] AND [CUST].[CustID] != [TRANS].[CustID]

这显然不会发生,因此没有行的结果。

为了让没有交易的客户,您应该这样做:

SELECT [CUST].[CustID],
       [CUST].[CustName]
FROM [Cust]
WHERE NOT EXISTS (SELECT 1 
                  FROM [TRANS]
                  WHERE [CUST].[CustID] = [TRANS].[CustID]
                 )         

答案 1 :(得分:1)

你正在加入

[CUST].[CustID] = [TRANS].[CustID]

但是where子句说

[CUST].[CustID] != [TRANS].[CustID]

如果您想要没有交易的客户列表,您应该使用LEFT JOIN

SELECT
[CUST].[CustID],
[CUST].[CustName]
FROM [Cust]
LEFT JOIN [TRANS]
ON [CUST].[CustID] = [TRANS].[CustID]
WHERE [TRANS].[CustID] is null