Sql 从查询中添加列

Sql 从查询中添加列,sql,join,Sql,Join,我有两个表(tblBestsellers,tblAllsellers) tblAllsellers包括店里所有的书 tblBestsellers仅包括已超过配额的卖家 它们之间的唯一链接是它们的productID 是否可以在运行时添加标题为“畅销书”的列?使用将显示该书是否畅销的查询,例如 ProductID - Product Name - Bestseller ---------------------------------------- 324234 Har

我有两个表(
tblBestsellers
tblAllsellers

  • tblAllsellers
    包括店里所有的书
  • tblBestsellers
    仅包括已超过配额的卖家
它们之间的唯一链接是它们的
productID

是否可以在运行时添加标题为“畅销书”的列?使用将显示该书是否畅销的查询,例如

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

我怀疑某处有一个IF语句

SELECT *
FROM tblAllsellers, tblbestsellers

您应该在ProductID上执行
tblAllSellers
tblBestSellers
左连接。如果在
tblBestSellers
中有某个给定ProductID的记录,则表示该产品是畅销书,否则就不是畅销书。因此,您可以在
案例
语句中为最后一列
畅销书
使用此列

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
您可以在另一个具有连接的查询中使用此选项,如下所示:

 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
如果要将此查询的结果与另一个查询的结果连接起来,则可以按如下操作:

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

您可以更好地使用
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

您使用哪个数据库系统(SQLServer、MySQL、Oracle等)?这很好,那么我如何将此查询与另一个具有大量内部联接的查询组合起来呢?我尝试了UNION,但收到错误消息“使用UNION、INTERSECT或EXCEPT组合的所有查询在其目标行中必须具有相同数量的表达式”,请将此查询括在括号中,并提供类似
的别名(请参阅上面的代码更新(仍然收到错误)。提前感谢。非常感谢您的帮助,但是我注意到案例陈述要么给出了全部N,要么给出了全部Y,并且没有正确比较两个表列。如果不同表中的列有不同的名称,会有区别吗?