1

我有两个表(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
4

2 回答 2

2

您应该对 ProductID执行LEFT JOINof tblAllSellerswith 。tblBestSellers如果tblBestSellers给定的 ProductID 中有记录,则表示该产品是畅销书,否则不是。因此,您可以在CASE最后一列的语句中使用此列BestSeller

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 语句中的列数、数据类型相同。

于 2012-12-03T14:55:59.380 回答
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
于 2012-12-03T14:56:28.597 回答