从查询中添加列

时间:2012-12-03 14:52:34

标签: sql join

我有两张桌子(tblBestsellerstblAllsellers)。

  • tblAllsellers包含商店中的所有图书
  • tblBestsellers仅包含已超过其配额销售的那些。

他们之间唯一的联系是productID

是否可以在运行时添加标题为Bestseller的列?使用一个查询,其中将显示该书是否是畅销书,如

ProductID   - Product Name  - Bestseller   
----------------------------------------
324234        Harry Potter        Y
382932        LOTHR               Y
234292        SQL Guide           N

等等。

我怀疑那里有IF语句?

SELECT *
FROM tblAllsellers, tblbestsellers

2 个答案:

答案 0 :(得分:2)

您应该在ProductID上使用LEFT JOIN执行tblAllSellers tblBestSellerstblBestSellers。如果给定ProductID的CASE中有记录,则表示该广告是最畅销的,否则不是。因此,您可以在最后一列BestSeller的{​​{1}}语句中使用此列。

SELECT 
    A.*, 
    CASE 
        WHEN B.ProductId IS NULL THEN 'N' 
        ELSE 'Y' 
    END 'BestSeller'
FROM 
    tblAllSellers A
    LEFT JOIN tblBestSellers B
    ON A.ProductId = B.ProductID

您可以在另一个使用JOIN的查询中使用它,如下所示:

 SELECT A.* 
 FROM 
     AnotherTable X
     JOIN 
     (
        SELECT 
            A.*, 
            CASE 
                WHEN B.ProductId IS NULL THEN 'N' 
                ELSE 'Y' 
            END 'BestSeller'
        FROM 
            tblAllSellers A
            LEFT JOIN tblBestSellers B
            ON A.ProductId = B.ProductID
     ) AS Y
     ON X.ProductId = Y.ProductID

如果您想将此查询的结果与来自其他查询的结果一起加入,那么您可以按以下方式进行:

 SELECT A.ProductId, A.COlumn1, A.Column2 ...
 FROM 
     AnotherTable X

 UNION 
 SELECT Y.ProductId, Y.Column1, Y.Column2..
 FROM
 (
 SELECT 
      A.*, 
      CASE 
           WHEN B.ProductId IS NULL THEN 'N' 
           ELSE 'Y' 
      END 'BestSeller'
 FROM 
      tblAllSellers A
      LEFT JOIN tblBestSellers B
      ON A.ProductId = B.ProductID
 ) AS Y

对于UNION场景,请确保两个SELECT语句中列的数量,数据类型相同。

答案 1 :(得分:0)

您可以更好地使用Case声明。

 SELECT A.*, CASE WHEN B.ProductId IS NULL THEN 'N' ELSE 'Y' END 'BestSeller'
 FROM 
tblAllSellers A, tblBestSellers B
where A.ProductId = B.ProductID