什么是正确的Select语句?

时间:2013-04-19 06:31:54

标签: sql sql-server-2000

//这是我的表1

    TransactionNum     Type  
    65658               0  
    65659               0  
    65660              449  
    65661               0  

//这是我的表2

    Type    Description          
    445 Discount #1  
    446 Discount #2  
    447 Discount #3  
    448 Discount #4  
    449 Discount #5  
    450 Discount #6  

//这是我的剧本

    SELECT a.TransactionNum,b.Description FROM Table1 a,Table2 b
    WHERE a.Type=b.Type ORDER BY TransactionNum  

//结果

    TransactionNum   Description
    65659            Discount #4

//我希望结果是这样的,结果中也应该包含0类型的TransactionNum,请帮我这个,我在这里使用SQL2000。

    TransactionNum      Description   
    65658               0  
    65659               0  
    65660              Discount #5  
    65661               0

3 个答案:

答案 0 :(得分:9)

改为使用LEFT JOIN

SELECT a.TransactionNum, 
       COALESCE(b.Description, CAST (a.Type AS VARCHAR(20))) AS Description
FROM   Table1 a LEFT JOIN Table2 b
          ON a.Type=b.Type
ORDER  BY a.TransactionNum

要进一步了解联接,请访问以下链接:

输出

╔════════════════╦═════════════╗
║ TRANSACTIONNUM ║ DESCRIPTION ║
╠════════════════╬═════════════╣
║          65658 ║ 0           ║
║          65659 ║ 0           ║
║          65660 ║ Discount #5 ║
║          65661 ║ 0           ║
╚════════════════╩═════════════╝

答案 1 :(得分:1)

在Oracle中,我们可以使用左外连接

     SELECT a.TransactionNum,b.Description FROM Table1 a,Table2 b
     WHERE a.Type=b.Type(+) ORDER BY TransactionNum 

答案 2 :(得分:1)

SELECT a.TransactionNum,isnull(b.Description,0)
FROM Table1 a
LEFT JOIN Table2 b
On a.Type = b.Type
Order by a.TransactionNum